rvalue or lvalue in C++

2015-07-10  本文已影响0人  令一

lvalue or rvalue ?

int a;

int b;

a = 3;

b = 4;

a = b;

b = a;

//error

a + b = 3;

3 = a;

Page 121:

当一个对象被用作左值时,用的是对象的身份(内存中的位置);

被用作右值时,用的是对象的值(内容);

其他说法:

Page 471:

左值有持久的状态,右值是短暂的,要么是字面常量,要么是在表达式求值过程中创建的临时对象。

判断方法:左值可以对其取地址;右值不可对其取地址。

左值是指在单个表达式的外部保留的对象,可以将左值视为具有名称的对象。所有变量(包括不能更改的 (const) 变量)都是左值。

右值是一个不在使用它的表达式的外部保留的临时值。

参考 https://msdn.microsoft.com/zh-cn/library/f90831hc.aspx

理解:

1. a++是右值,而++a是左值:

int a = 10;

int &&rr = a++;   //后置版本返回原值a的一个副本,是临时的;

int &lf = ++a;      //前置版本返回递增后的原值,是持久的;

2. 右值引用也是一个左值:

int &&rri = 10;     //通过右值引用,临时变量变得持久;

int &lri = rri;

上一篇下一篇

猜你喜欢

热点阅读