我在lvalue
工作草案中读到了c++ 14 N3797
概念,我对此有疑问。标准说:
秒。 3.10 / 1 N3797:
乍一看没关系。但是秒。 5/1 N3797提供了表达式的定义。它说:表达式根据图1中的分类法进行分类。
-An 左值(所谓的,历史上,因为左值可能出现在 赋值表达式的左侧指定函数或 一个东西。 [示例:如果E是指针类型的表达式,则* E为 一个左值表达式,指向E的对象或函数 点。另一个例子,调用一个函数的结果 return类型是左值引用是左值。 - 例子]
表达式是指定a的运算符和操作数的序列 计算
现在考虑秒。 5.4 / 1:
表达式(T)cast-expression的结果是T型 如果T是左值引用类型或右值,则结果是左值 如果T是右值引用,则引用函数类型和xvalue 对象类型;否则结果就是prvalue。
我们认为lvalue
是一个定义的表达式(即运算符和操作数的序列),lvalue
的结果是lvalue
(也是运算符和操作数的序列) )。我不清楚表达式如何在求值后返回一个表达式(左值在我引用的5.4 / 1的引号中返回lvalue)。
你能解释一下吗?
答案 0 :(得分:1)
我认为这只是略显草率的措辞。
在C ++(以及C语言)中,“左值”是一种表达式。而不是
如果T是左值,结果是左值......
它应该说:
如果T是左值...
,表达式是左值
“左值”这个词的含义多年来从一种语言到另一种语言各不相同。如果我没记错的话,最初的想法是“左值”是一种值,并且可以为其左值(确定它指定的对象)或其右值(确定值)评估表达式。也许作者在写这句话时有这样的意思。