【问题标题】:Is this expression an lvalue or an rvalue?这个表达式是左值还是右值?
【发布时间】:2019-05-13 16:25:20
【问题描述】:

看看这个表达式:

T t;    
T& ref = t;

ref 表达式是 lvalue 还是 rvalue? 我相信它是 rvalue,因为 ref 没有“指定函数或对象”

"一个左值(历史上称为左值,因为左值可能出现在 赋值表达式的左侧)指定一个函数 或一个对象。”

[开放标准草案 n3092]

根据cppreference,引用不是对象。

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

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

【问题讨论】:

  • ref 本身,作为一个实体,不是一个对象。不过,expression ref 确实指定了一个对象。不要混合实体本身和仅由实体名称组成的 表达式。这些是不同的东西,它们的处理方式不同。
  • @tadman 我没有使用类对象定义。请参阅我放在那里的 cppreference 链接。
  • @AnT 表达式ref 指定了哪个对象?这就是我不明白的。对象会是t,一旦ref 是它的别名?
  • 复制?还是相关的? stackoverflow.com/questions/3601602/…
  • 它是一个对 T 对象的左值引用。en.cppreference.com/w/cpp/language/reference

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


【解决方案1】:

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

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

我相信它是一个右值,因为 ref 没有“指定一个函数或一个对象”

它指定与t 相同的对象。

【讨论】:

    【解决方案2】:

    引用确实指定了一个函数或对象!它在标准中是这样写的!见[expr.type]/1:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多