理解左值概念

时间:2014-08-02 06:45:27

标签: c++

我在lvalue工作草案中读到了c++ 14 N3797概念,我对此有疑问。标准说:

秒。 3.10 / 1 N3797:

  

表达式根据图1中的分类法进行分类。

     

-An   左值(所谓的,历史上,因为左值可能出现在   赋值表达式的左侧指定函数或   一个东西。 [示例:如果E是指针类型的表达式,则* E为   一个左值表达式,指向E的对象或函数   点。另一个例子,调用一个函数的结果   return类型是左值引用是左值。 - 例子]

乍一看没关系。但是秒。 5/1 N3797提供了表达式的定义。它说:

  

表达式是指定a的运算符和操作数的序列   计算

现在考虑秒。 5.4 / 1:

  

表达式(T)cast-expression的结果是T型   如果T是左值引用类型或右值,则结果是左值   如果T是右值引用,则引用函数类型和xvalue   对象类型;否则结果就是prvalue。

我们认为lvalue是一个定义的表达式(即运算符和操作数的序列),lvalue的结果是lvalue(也是运算符和操作数的序列) )。我不清楚表达式如何在求值后返回一个表达式(左值在我引用的5.4 / 1的引号中返回lvalue)。

你能解释一下吗?

1 个答案:

答案 0 :(得分:1)

我认为这只是略显草率的措辞。

在C ++(以及C语言)中,“左值”是一种表达式。而不是

  

如果T是左值,结果是左值......

它应该说:

  

如果T是左值...

表达式是左值

“左值”这个词的含义多年来从一种语言到另一种语言各不相同。如果我没记错的话,最初的想法是“左值”是一种值,并且可以为其左值(确定它指定的对象)或其右值(确定值)评估表达式。也许作者在写这句话时有这样的意思。