什么是左值?

可能重复:
什么是右值,左值,xvalues,glvalues和prvalues?

主要在第5章标题为“表达式”的C ++标准定义了哪些表达式是左值和哪些是右值。 我已阅读过这一章,我相信我能正确区分左值和右值。

然而,在我阅读完善的C ++书籍和/或标准之前,我曾经认为左值是可以站在赋值左侧的东西,而右值是不能的。 很明显,这个幼稚的定义有很多反例。 一段时间后,我认为左值是有地址的东西,右值是没有的地址。 这也似乎以一些临时对象的形式出现反例,而这些对象显然确实有地址。

我的一位朋友问我什么是左值,什么是右值。 我告诉他大概是什么,他要求一个更完整的答案。 我告诉他去读标准。 他拒绝猥亵他的脑子,并说他肯定有一些必要的充分条件让某件东西成为左翼。

在那儿?

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

我希望这个问题很明确。


简而言之,右值是当表达式结果不会在所述表达式结束时存活。 一个左值会。 这个基本原理是使移动语义和右值引用的东西 - 你可以毫无问题地修改它们,因为你知道对象的生命已经结束了。


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


可能你只是在可修改的左值与非左值之间有点混淆。 右值可以是左值或非左值。在C ++中引入常量修饰符(参见值上的维基百科条目)后,使用术语可修饰的左值。每一个表达式都返回左值,右值或无值。当左值出现为右值时隐式转换为右值(请参阅IBM的值类型)

链接地址: http://www.djcxy.com/p/73001.html

上一篇: What is an lvalue?

下一篇: Xvalues vs prvalues: what does identity property add