通俗理解(c++03
- 能放在等号左边的是左值
- 只能放在等号右边的是右值
- 左值也可以作为右值使用
c++11
- 左值制定了一个函数或者对象,它是一个可以取地址的表达式。
- 右值是不和对象相关联的值(字面量)或者其求值结果是字面量或者是一个匿名的临时对象。
如:32 ‘a’ i++
(a+b) //匿名的临时对象;
&x;
将亡值:
将纯右值转换为右值引用的表达式
int a=1;
int& b=a;//左值引用
const int& lvr5{21};//常量左值引用可以引用纯右值;
int& lvr6{22};//错 非常量左值引用不可引用纯右值;
int&& rvr2{prv(2)};//右值引用普通函数返回值;
int&& rvr1{22};//右值引用可以引用纯右值;
rvr1=++rvr2;//右值引用可以做左值引用;