Могу ли я узнать, почему этот кусок кода действителен. Спасибо.Изменение типа в rvalue
double i=5;//int i=5 will invalidate this piece of code
int && r1=i;
std::cout<<r1<<std::endl;
Могу ли я узнать, почему этот кусок кода действителен. Спасибо.Изменение типа в rvalue
double i=5;//int i=5 will invalidate this piece of code
int && r1=i;
std::cout<<r1<<std::endl;
[dcl.init.ref]/1 Переменная объявлена
T&
илиT&&
, то есть, "ссылка на типT
" (8.3.2), должны быть инициализируется объекта или функции типаT
или объектом, который может быть преобразован вT
.[dcl.init.ref]/5 Ссылка на тип "
cv1 T1
" инициализируется выражением типа "cv2 T2
" следующим образом:...
(5.2.2.2) - Если
T1
является неклассовым типом, временный тип «cv1 T1
» создается и инициализируется с копией (8.5) из выражения инициализатора. Ссылка затем привязана к временному.
Спасибо за ссылку :-) – Des1gnWizard
Не могли бы вы выделить конкретную подозрительную вещь в теле вопроса? –
Потому что, если это int i = 5, то он становится недействительным, потому что ссылка привязана к lvalue – Des1gnWizard
Хотя я не уверен, я полагаю, что ссылка связывается с rvalue, которая является результатом неявного преобразования. –