Почему константа ссылки влияет на возможность ее инициализации с помощью переменной другого типа? - PullRequest
2 голосов
/ 25 августа 2011

Почему этот код не компилируется?

 double d ;
 int & i1 = d // Compilation FAILS  

Пока это делает?

 double d ;
 const int & i = d // Compilation Succeeds

Пожалуйста, мне интересно узнать, что разработчики C ++ думали о том, что они допускают одно поведение, а другое запрещают.

Я знаю, что в любом случае это аморально, независимо от того, технически возможно это или нет. Также, к вашему сведению, я использую GCC на Mac с "-O0 -g3 -Wall -c -fmessage-length = 0"

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

Поскольку он создает временную int, где конвертируется двойная, и изменяемые ссылки не могут привязываться к временным файлам, тогда как const могут.

Проблема с разрешением непостоянных ссылок для привязки к временным файлам относительно ясна.

Derived* ptr;
Base*& baseptr = ptr;
baseptr = new Base;
ptr->SomeDerivedFunction();
0 голосов
/ 25 августа 2011

Когда вы говорите

double d = 5.0; 
double &dd = d;

, тогда dd изменяется как d.Но, если вы скажете,

const double &dd = d;

dd - это const двойная ссылка - его значение не может измениться, даже если d изменится, делая часть «ссылки»его определения невозможно.Следовательно, когда вы используете const, & вызывает создание временного объекта и устанавливает ссылку для ссылки на этот временный объект.const int & i = d;, следовательно, фактически совпадает с const int i = d;, что разрешено.

...