在C++中,左值(lvalue)是可以获取其地址的一个量。由于经常出现在赋值语句的左边,因此称之为左值。例如一个有名称的变量。 例如:
int a=10; //a就是一个左值。
传统的C++引用,都是左值引用。例如:int &ra=a;将ra关联到a。这就是左值引用。
C++11,新增了右值引用的概念。用&&代表右值引用。
首先我们来看一下什么叫做右值。可以说所有不是左值的量都是右值。例如文本,临时对象或者临时值(都是不能获取地址的量)。
右值引用,就是一个对右值的引用。特别地,这是一个当右值是一个临时对象时使用的概念。例如。
int &&ra=10;
10就是一个右值,ra将是10这个右值的引用。看例子:
[cpp] view plaincopyprint
#include
using namespace std;
int main()
{
int &&ra=9;
cout<<&ra<
ra=5;
cout<<&ra<
cin.get();
}
输出结果:

有趣的是,将右值关联到右值引用将导致该右值被存储到特定的位置,且可以获取该位置的地址。例如,你不能对右值9或者5进行&运算,但是可以对ra进行&运算。
右值引用的目的是提供一些涉及临时对象时可以选用特定的方法(主要是复制构造函数以及operator=,但并不限于此)。由于知道临时对象会被销毁,通过右值引用,某些涉及复制大量数据的操作可以通过简单地复制指向这些值的指针来实现。