什么是左值?

Arm*_*yan 19 c++

可能重复:
什么是rvalues,lvalues,xvalues,glvalues和prvalues?

C++标准,主要在第5章,标题为表达式,定义哪些表达式是左值,哪些是右值.我读过那一章,我相信我可以正确区分左值和右值.

然而,在我阅读好的C++书籍和/或标准之前,我曾经认为左值是可以站在赋值左侧的东西,右值是不能的.显然,这个天真的定义有很多反例.一段时间后,我认为左值是一个有地址的东西,右值是没有的东西.这也似乎有一些反例,例如,一些临时物体,显然,它们确实有一个地址.

我的一个朋友问我什么是左值,什么是左值.我告诉他大概是什么,他要求一个更完整的答案.我告诉他去读标准.他拒绝骚扰他的大脑,并说他确信必须有一些必要和充分条件才能成为一个左右.

在那儿?

例如,左值是非const引用可以绑定的值.但这个并不令人满意.我正在寻找一些更明显的东西,这些东西很容易解释,而不需要考虑每种表达类型......

我希望这个问题很明确.

Pup*_*ppy 10

非常简单,rvalue是表达式结果不能在所述表达式结束后存活的时间.左值将.这个基本原则是移动语义和右值引用的功能 - 您可以毫无问题地修改它们,因为您知道对象的生命已经结束.


Den*_*ose 8

我发现将左值作为"有名字的东西"是最有用的简化.表达式++x是左值,名称为x.相比之下,rvalue是"没有名字的东西". x++是一个右值,因为它会产生一些未命名的值.

  • @Dennis,`f()` 是一个右值,但不是临时的。事实上,可以说每个临时文件都有一个地址。每个临时对象都是一个对象,一个对象是一个存储区域。但是 C++ 中仍然没有具有名称的临时对象(但并非每个无名对象都是临时对象!)。 (2认同)