简介:
我们知道C++有引用,即取地址&运算符。那右值引用是什么?我们可以认为=左边为左值,可以获取左边地址,右边为右值,C++11里面新定义了一个概念右值引用,即&&;需要注意的是,右值引用不会影响值的变化。
用途:
1、转移功效
// 比如我们常用string对象去初始化另一个变量对象,那么在这个过程中会调用str的拷贝构造函数,然后增加
// 一个临时变量,分配内存,完成后在释放掉,
string str1 = 10;
string str2 =str1; // or getstring(str1)
// && 会将内存直接移动到str3中,间接减少内存分配和释放步骤
string &&str3 = getstring(str1);
2、匿名函数起别名
int a = 10;
int b = 20;
int &&c = a + b; //ok
// int &&c = a; // err 还是左值
const int &&c = 20;c是20的匿名对象
int &&c; //err 没有初始化
C++11将右值区分为了:
- 纯右值:纯右值是C++98中右值的概念,用于识别临时变量和一些不跟对象关联的值。比如:常量、一些运算表达式(1+3)等。
- 将亡值:声明周期将要结束的对象。比如:在值返回时的临时对象。