int x = 8;
int y = x ;
这里左值如何作为右值?我知道这是一个愚蠢的问题,但我只是想在rvalue和左值上清楚我的概念。
答案 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
的值。您可以将左值作为右值的子集,即所有左值都可以查询其值并将其用作右值。