1. 左值与右值
c++中所有的值必然属于左值、右值之一,左值表示表达式结束后持久化存在的对象,而右值表示表达式结束后就不复存在的临时对象,判断左右值的简单方法:如果可以对表达式取地址,即为左值,否则为右值
2. 右值引用
右值引用的实质:是为一个即将消亡的临时对象取一个别名,从而扩展其生存期。
int&& a = 1; //实质上就是将不具名(匿名)变量取了个别名
int b = 1;
int && c = b; //编译错误! 不能将一个左值复制给一个右值引用
class A
{
public:
int a;
};
A getTemp()
{
return A();
}
A && a = getTemp(); //getTemp()的返回值是右值(临时变量)
getTemp()返回的右值本来在表达式语句结束后,其生命也就该终结了(因为是临时变量),而通过右值引用,该右值又重获新生,其生命期将与右值引用类型变量a的生命期一样,只要a还活着,该右值临时变量将会一直存活下去。实际上就是给那个临时变量取了个名字。
注意:这里a的类型是右