如何将左值转换为右值

时间:2012-12-24 18:32:16

标签: c++ c lvalue rvalue

int x = 8;
int y = x ;

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

2 个答案:

答案 0 :(得分:3)

通过左值转换为 rvalue

您几乎可以在需要 rvalue 的任何地方使用左值,并隐式左值 rvalue 转换将自动发生。

非正式地,此转换是“评估”或“取值”左值所引用的对象。在所有情况下都不是严格确实如此;在未评估的上下文中,例如sizeof的操作数,将不使用该对象的值。

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

  

非函数非数组类型T的glvalue(3.10)可以转换为prvalue。如果T是不完整类型,则需要进行此转换的程序格式不正确。如果glvalue引用的对象不是T类型的对象,并且不是从T派生的类型的对象,或者如果对象未初始化,则需要此转换的程序未定义行为。如果T是非类类型,则prvalue的类型是T的cv非限定版本。否则,prvalue的类型为T

答案 1 :(得分:2)

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