Я работал над некоторым шаблоном кода сегодня утром, когда использовал BOOST_STATIC_ASSERT
, чтобы убедиться, что я не создавал ссылку на неправильный тип, поскольку я думал, что это может быть более ясное сообщение об ошибке. Однако, когда я попытался удалить статический assert, чтобы взглянуть на альтернативную ошибку компилятора, я был потрясен, обнаружив, что gcc даже не жалуется, когда вы пытаетесь создать const double & ссылаясь на int:
#include <iostream>
int main()
{
int x = 5;
const double& y = x;
std::cout << y << std::endl;
return 0;
}
Скомпилирует и даже не предупреждает:
$ g++ ~/stuff/badRef.cpp -Wall -Wextra -pedantic
$ a.out
5
Что здесь происходит? Это поведение undefined? Если да, то почему GCC не жалуется? На моей машине int составляет 4 байта, а double - 8. Это означает, что при печати double & он должен интерпретировать 8 байтов на этом адресе как двойной и распечатать его, но в этом месте на самом деле есть 4 байта int.
Очень смутно. Помогите!