右值引用用于获取匿名变量的使用权,并延长匿名变量的生命周期,比如表达式的返回和函数的返回,都是由编译器创建的一些变量,没有右值引用的时候只能通过赋值给
中间变量的方法来保持住这个值,但是这也增加了一次构造的开销。为了能够保持这个值而且又不用去再次构造那么就可以用右值引用。除了表达式和函数返回值这种天生的右值
还可以通过std::move来将一个左值变为一个右值,左值是可以直接使用的变量(具名变量),为什么还要转换为右值。因为在类具有右值引用构造函数和右值引用赋值函数的时候就
可以调用此类函数了。前提是前面的左值不再使用了,因为在右值引用构造或者赋值函数里面左值的内容已经被交给新类来管理了(一般都会这么做,否则还要什么右值引用类函
数)。
左值引用是具名变量值的别名,而右值引用则是不具名(匿名)变量的别名。
常量左值引用在C++98标准中开始就是个“万能”的引用类型。它可以接受非常量左值、常量左值、右值对其进行初始化。
而且在使用右值对其初始化的时候,常量左值引用还可以像右值引用一样将右值的生命期延长。不过相比于右值引用所引用的右值,
常量左值所引用的右值在它的“余生”中只能是只读的。相对地,非常量左值只能接受非常量左值对其进行初始化。
引自: http://book.2cto.com/201306/25366.html