Я попытался скомпилировать:Связать ссылку lvalue с ссылкой на rvalue?
int &&a=3;
int &b=a;
И это работает. Я знаю, что «a» - это значение lvalue, но почему я могу привязать ссылку «rvalue to int» к «lvalue reference to int (не к ссылке rvalue для int)»? Таким образом, я могу изменить значение временного, 3:
b=5 //changing the value of the temporary bound to the rvalue reference
Этого tecnique используется из станда :: вперед, поэтому я полагаю, что это стандартное поведение. Является ли ссылкой rvalue на int, рассматриваемой как простая int lvalue, сохраняющая временную? Если нет, как вы объясните привязку?
Но, я знаю, что только ссылка const lvalue может быть привязана к временному. Есть ли какое-либо правило, позволяющее простой ссылке lvalue привязываться к временному, если его срок жизни расширен? – Toccio
@Toccio: Это неправда. Только ссылки const lvalue (и ссылки rvalue) могут быть привязаны к объекту, доступ к которому осуществляется через выражение rvalue. Но 'a' является выражением lvalue, потому что оно относится к _name_ объекта. Это не имеет большого значения, чем объект, на который ссылаются ссылки, является временным. –
Еще один вопрос: когда я свяжу ссылку lvalue A с другой ссылкой на Lvalue, которая ссылается на C, что я действительно делаю, это привязка A к C правильно? Итак, если B является ссылкой на rvalue, а C является временным, это похоже на привязку A к C? – Toccio