表达式结果与表达式表示之间的差异

时间:2019-05-09 19:20:14

标签: c++ language-lawyer

[basic.lval] p5状态:

  

glvalue的结果是由表达式表示的实体。

我对此有一些疑问,它的含义是: 表达式表示的实体是什么? 这会与结果有所不同吗? [expr.type] p1指出:

  

表达式指定引用所表示的对象或功能

因此,例如,给定声明foo f;,其中foo是类类型,表达式f;也会是标识符,这就是表示实体的表达式的含义,因为表达式名称对应于标识符?

我要问的是,表示一个实体的表达式意味着什么,它与结果有何不同?

1 个答案:

答案 0 :(得分:1)

我认为[basic.lval] / 5基本上是说命名/表示/指定和“结果”的概念在标准中可以互换使用。

  

glvalue的结果是表达式表示的实体。   prvalue的结果是表达式存储到其上下文中的值;具有cv void类型的prvalue没有结果。   有时称结果为V的prvalue具有或命名为V。

glvalue或prvalue是表达式[basic.lval]/1。计算所有表达式。即使出现在表达式中(而不是在声明中)的单个名称也是表达式。 在评估前,表达式可以表示一个实体,在评估后,该表达式在该实体中的结果。

例如,要评估表达式a+b,虚拟机首先评估aa表示某个对象,对a求值的结果就是该对象。对于b同样。然后,将表达式a的结果和表达式b的结果(在某些转换之后)用作求和结果的操作数。

其他表达式只使用一个表达式的结果。因此,将表达式归纳为其结果似乎很自然。当我们这样做时,我们会忘记结果是表达式表达式的结果。