В последние несколько дней я пытался понять, по-видимому, тривиальный принцип за ссылками lvalue/rvalue. Определим новый RValue ссылка: поэтому, связывающий выражение lvalue типа T &&
int&& x = 12;
x
является именующее выражение типа int&&
. Так как x
является значением lvalue, оно может быть привязано к ссылочной позиции lvalue того же типа, то есть ссылку на lvalue типа int&&
. Такой именующая ссылка будет определяться как:
int&& & ref_x = x; // non-working code, just for the sake of explanation
Конечно, это не представляется возможное явно определить ссылку на ссылку, и правильный способ выполнить связывание следующим образом:
int& ref_x = x;
C++ Primer сообщает следующее об использовании ссылок в инициализаторах:
когда мы используем ссылку как инициализатор, мы действительно с помощью объекта, на который делается ссылка б ound
С другой стороны, ссылка lvalue должна соответствовать типу выражения lvalue. Что мне не хватает? В этом случае задействован ссылочный коллапс?
Спасибо.
Как насчет следующего утверждения из статьи «Универсальные ссылки в C++ 11» Скотта Мейера: «Поскольку плотность или простота выражения не зависит от его типа, возможно иметь lvalues, тип которых является ссылкой rvalue, и также возможно иметь rvalues типа rvalue reference "_? –
@ burton0: Не знаю. Может быть, он означает, что переменная, являющаяся ссылкой rvalue, может выражать выражение, которое является lvalue? –
«Тип значения выражения никогда не является ссылкой». Я не уверен, что вы имеете в виду с * типом значения выражения *, но тип 'static_cast (x)' является ссылкой на lvalue, а его категория значений - lvalue. Скотт Мейерс также использует [примеры в качестве примера] (http://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers). –
dyp