glvalue的结果是由表达式表示的实体。
我对此有一些疑问,它的含义是: 表达式表示的实体是什么? 这会与结果有所不同吗? [expr.type] p1指出:
表达式指定引用所表示的对象或功能
因此,例如,给定声明foo f;
,其中foo
是类类型,表达式f;
也会是标识符,这就是表示实体的表达式的含义,因为表达式名称对应于标识符?
我要问的是,表示一个实体的表达式意味着什么,它与结果有何不同?
答案 0 :(得分:1)
我认为[basic.lval] / 5基本上是说命名/表示/指定和“结果”的概念在标准中可以互换使用。
glvalue的结果是表达式表示的实体。 prvalue的结果是表达式存储到其上下文中的值;具有cv void类型的prvalue没有结果。 有时称结果为V的prvalue具有或命名为V。
glvalue或prvalue是表达式[basic.lval]/1。计算所有表达式。即使出现在表达式中(而不是在声明中)的单个名称也是表达式。 在评估前,表达式可以表示一个实体,在评估后,该表达式在该实体中的结果。
例如,要评估表达式a+b
,虚拟机首先评估a
。 a
表示某个对象,对a
求值的结果就是该对象。对于b同样。然后,将表达式a
的结果和表达式b
的结果(在某些转换之后)用作求和结果的操作数。
其他表达式只使用一个表达式的结果。因此,将表达式归纳为其结果似乎很自然。当我们这样做时,我们会忘记结果是表达式表达式的结果。