【发布时间】:2011-09-17 20:55:07
【问题描述】:
可能重复:
What are rvalues, lvalues, xvalues, glvalues, and prvalues?
C++ 标准(主要在第 5 章题为“表达式”)定义了哪些表达式是左值,哪些是右值。我读过那一章,我相信我可以正确区分左值和右值。
然而,在我阅读好的 C++ 书籍和/或标准之前,我曾经认为左值可以位于赋值的左侧,而右值则不能。显然,这个幼稚的定义有许多反例。一段时间后,我认为左值是有地址的东西,而右值是没有地址的东西。这似乎也有一些临时对象形式的反例,这些临时对象显然确实有一个地址。
我的一个朋友问我什么是左值,什么是右值。我告诉他大概是什么,他要求更完整的答案。我告诉他去读标准。他拒绝打扰他的大脑,并说他确信必须有一些必要和充分条件才能使某物成为左值。
有吗?
例如,左值是非常量引用可以绑定到的东西。但是这个真的不能令人满意。我正在寻找更明显的东西,易于解释的东西,而无需考虑每种表达式类型......
我希望问题很清楚。
【问题讨论】:
-
我相信您尝试过多以对它们中的每一个都有一个唯一的定义。有些元素既可以是左值也可以是右值。
int a; int b; b = 4; a = b; -
前段时间有一个类似的问题,基本要点是返回结构的函数也可以分配给。所以你可以做类似 foo() = 不管的事情。这是问题:stackoverflow.com/questions/6111905/c-is-return-value-a-l-value(从下面的低评分答案移出)
-
我很失望这个问题被认为与任何建议的链接重复。
标签: c++