这个表达式是左值还是右值?

时间:2019-05-13 16:25:21

标签: c++ c++11 move-semantics rvalue

看看这个表达式:

T t;    
T& ref = t;

ref表达式是lvalue还是rvalue我相信它是rvalue,因为ref不是< em>“指定函数或对象” :

  

“左值(之所以被称为,是因为左值可能会出现在   赋值表达式的左侧)指定一个函数   或对象。”

[标准草案n3092]

根据cppreference,引用不是对象。

  

“以下实体不是对象:值,引用[...]”

我很怀疑,因为ref位于=的左侧。

2 个答案:

答案 0 :(得分:5)

  

我有疑问,因为ref位于=的左侧。

ref是一个名称,因此是一个左值。

  

我认为这是一个右值,因为ref并不“指定函数或对象”

它指定与t相同的对象。

答案 1 :(得分:4)

引用确实指定了功能或对象!它的字面意义与标准中的一样!参见CaryKH

  

如果表达式最初的类型为“对T的引用”([dcl.ref],[dcl.init.ref]),则在进行任何进一步分析之前,将类型调整为T。   表达式指定引用所表示的对象或功能,[...]