代码之家  ›  专栏  ›  技术社区  ›  João Paulo

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

  •  0
  • João Paulo  · 技术社区  · 5 年前

    看看这个表达:

    T t;    
    T& ref = t;
    

    这个 ref 表达是一种语言 lvalue 或者 rvalue ? 我相信这是一个 右值 因为 裁判 没有 “指定函数或对象” :

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

    [开放标准草案n3092]

    根据 cppreference ,引用不是对象。

    以下实体不是对象:值、引用[…]

    我很怀疑,因为 裁判 在左边 = .

    0 回复  |  直到 5 年前
        1
  •  5
  •   Paul Evans    5 年前

    我很怀疑,因为ref在=。

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

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

    它将同一对象指定为 t

        2
  •  4
  •   Oliv    5 年前

    引用并不指定函数或对象!在标准中是这样写的!看中 [expr.type]/1 :

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