1. 左值
- 能取地址 ;
- 能赋值
2.右值
- 不能赋值,不能取地址
例子: a = b+c
a是左值,b+c是右值,因为&a是正确的,而&(b+c)是错误的
int i =0; //i 是左值
int get() //函数的返回值是纯右值
{
return 0;
}
右值分为:将亡值与纯右值
1. 纯右值:
- 常量与常表达式 ,如 1+3 , 2 ,‘c’,true等;
- 非引用返回的函数的返回值;
- lamda表达式,类型转换函数的返回值
2.将亡值:
- 返回右值引用(T&&)的函数返回值;
- std::move()的返回值
- 转换为T&&的类型转换函数的返回值
注意:
- 常量左值引用可以接受非常量左值,常量左值,右值对其进行初始化。而且在使用右值对其初始化的时候,常量左值引用还可以像右值引用一样将右值的生命期延长。
- 非常量左值只能接受非常量左值对其进行初始化
在C++11中,所有的值必为左值,将亡值,纯右值之一。
详细参考:https://blog.csdn.net/hyman_yx/article/details/52044632