Является ли это выражение lvalue или rvalue? - PullRequest
4 голосов
/ 13 мая 2019

Посмотрите на это выражение:

T t;    
T& ref = t;

Выражение ref - это lvalue или rvalue? Я считаю, что это rvalue, потому что ref не "обозначает функцию или объект" * * 1013

"lvalue (так называемый исторически, потому что lvalue может появляться на левая часть выражения присваивания) обозначает функцию или объект. "

[open-std draft n3092]

Согласно cppreference ссылка не является объектом.

"Следующие объекты не являются объектами: значение, ссылка [...]"

Я сомневаюсь, потому что ref находится в левой части =.

Ответы [ 2 ]

5 голосов
/ 13 мая 2019

Я сомневаюсь, потому что ссылка находится в левой части =.

ref - это имя и, следовательно, lvalue.

Я считаю, что это значение, потому что ref не "обозначает функцию или объект"

Он обозначает тот же объект, что и t.

4 голосов
/ 13 мая 2019

Ссылка обозначает функцию или объект! Буквально так написано в стандарте! См. [expr.type] / 1 :

Если выражение изначально имеет тип «ссылка на T» ([dcl.ref], [dcl.init.ref]), тип корректируется до T перед любым дальнейшим анализом. Выражение обозначает объект или функцию, обозначаемую ссылкой , [...]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...