0
int x = 8;
int y = x ;

在这里,左值如何充当右值?我知道这是一个愚蠢的问题,但我只想让我的概念清楚 rvalue 和 lvalue 。

4

2 回答 2

3

通过左值右值的转换。

您几乎可以在需要右值的任何地方使用值,并且会自动进行隐式左值右值的转换。

非正式地,这种转换是“评估”或“取值”左值所指的对象。并非在所有情况下都严格如此。在未计算的上下文中,例如 的操作数sizeof,不会使用对象的值。

ISO/IEC 14882:2011 4.1 [conv.lval]:

非函数、非数组类型的 glvalue (3.10)T可以转换为纯右值。如果T是不完整类型,则需要进行此转换的程序格式错误。如果泛左值所引用的对象不是类型对象,T也不是派生自 的类型的对象T,或者如果该对象未初始化,则需要此转换的程序具有未定义的行为。如果T是非类类型,则纯右值的类型是 的 cv 非限定版本T。否则,纯右值的类型是T

于 2012-12-24T18:36:07.523 回答
2

左值是可以出现在赋值左侧的任何值。可以分配的东西,例如x本例中的变量。右值是具有价值的事物,例如8或获得 的价值x。您可以将左值视为右值的子集,即所有左值都可以查询其值并将其用作右值。

于 2012-12-24T18:36:17.477 回答