这个问题已经在这里有了答案:




9年前关闭。






C++标准(主要在第5章,标题为表达式)定义了哪些表达式是左值,哪些表达式是右值。我已经读过该章,并且相信可以正确地区分左值和右值。

但是,在我读过好的C++书籍和/或标准之前,我曾经认为左值是可以放在赋值左侧的东西,而右值是不能站在赋值左侧的东西。显然,这个天真的定义有许多反例。一段时间后,我认为左值是具有地址的东西,而右值是没有地址的东西。这似乎也有一些临时对象形式的反例,这些对象显然具有地址。

我的一个 friend 问我什么是左值,什么是右值。我告诉他大概是什么,他要求一个更完整的答案。我告诉他去阅读标准。他拒绝骚扰他的大脑,并说他确信某种东西要成为左值必须有一定的必要和充分条件。

在吗?

例如,左值是非常量引用可以绑定(bind)的对象。但是,这并不十分令人满意。我正在寻找更明显的东西,易于解释的东西,而不必考虑每种表达式类型...

我希望这个问题是明确的。

最佳答案

简而言之,右值是表达式结果无法在表达式末尾生存的情况。一个左值将。基本原理是启用移动语义和右值引用的原因-您可以毫无问题地对其进行修改,因为您知道对象的生命已经结束。

关于c++ - 什么是左值? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6397745/

10-11 20:31