LINUX.ORG.RU

Насколько я понимаю, это пункт 3.10.1: An lvalue (so called, historically, because lvalues could appear on the left-hand side of an assignment expression) designates a function or an object. Переменная designates an object, поэтому выражение i является lvalue. Вообще {l,r,x,gl}value - это характеристика выражения.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Но само выражение i является lvalue, несмотря на то что тип i - int&&.

Насколько я понимаю i здесь rvalue, т.к ее тип int&& - а это универсальная ссылка, и в выражении int&& i = 5 полностью определенный тип параметра и нет никакого выведение типа, тогда получается что это rvalue reference
А так да, в стандарте это 3.10 Lvalues and rvalues

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от Boy_from_Jungle

Насколько я понимаю i здесь rvalue

Нет, всё, что поименовано - lvalue.

int&& - а это универсальная ссылка

нет, универсальные ссылки появляются только в шаблонах функций, т.е. в

template<typename T>
void foo(T&& x, int&& y) {}

x - универсальная ссылка (при инстанцировании шаблона T может стать как lvalue, так и rvalue reference), y - всегда rvalue reference to int (но внутри foo выражение y является lvalue).

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Нет, всё, что поименовано - lvalue.

точно, перечитал, понял что был неправ

x - универсальная ссылка (при инстанцировании шаблона T может стать как lvalue, так и rvalue reference),

угу, но как я понял если ее сделать const то это станет уже r-value

Boy_from_Jungle ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.