右值引用是C++11引入的新特性,用于支持移动语义和完美转发。右值引用可以延长临时对象的生命周期,也可以用于改变临时对象的值。它们主要用于实现移动构造函数和移动赋值操作符,以及其他接收临时对象作为参数的函数。
在C++中,我们可以把表达式分为左值(lvalue)和右值(rvalue)。左值是可以在赋值表达式左边出现的表达式,它们有持久的状态(一个变量就是一个典型的左值)。而右值是只能在赋值表达式右边出现的表达式,它们通常没有持久的状态,或者不能通过一个变量名访问。
右值引用使用两个连续的&符号来声明,比如int&&
。下面是一个使用右值引用的例子:
int&& rv = 1; // 1是一个右值,rv是一个右值引用
在函数参数中,我们经常看到像T&