一、先确定基础:左值(Lvalue)和右值(Rvalue)
理解Rvalue引用,首先得搞清楚左值和右值的概念。
-
左值(Lvalue):有明确内存地址的表达式,可以取地址。比如变量名、引用等。
复制代码
int a = 10; // a是左值 int& ref = a; // ref也是左值
-
右值(Rvalue):没有确定持续存在的内存地址,通常是临时对象或字面量。比如表达式的结果或字面量。
复制代码
5; // 5是一个右值(字面量) a + 2; // 这是一个右值(表达式的结果) std::string("abc"); // 临时字符串对象,也是右值
总结一句话:左值可以“存放在某个什么地方”,右值是“临时的、可以马上用完的东西”。
二、引入"&":为什么要用“&&”?
传统上(C++98/03),引用(&
)只能绑定到左值,叫左值引用。比如:
复制代码
int a =