罗浩的技术专栏 Android and Python and C++ Coder

C++11右值引用

2019-07-28
qmsggg37

c++

C++11增加了一个新的类型,称为右值引用(R-value reference),标记为T&&。在介绍右值引用类型之前要了解什么是左值 和右值。左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。一个区分左值和右值的 便捷方法是:看能不能对表达式取地址,如果能,则为左值,否则为右值。所有具名变量或对象都是左值,而右值不具名。 具体左右和右值请参考左值和右值;

在C++11中,右值由两个概念构成,一个是将亡值(xvalue,expiring value),另一个则是纯右值(prvalue,PureRvalue), 比如,非引用返回的临时变量、运算表达式产生的临时变量、原始字面量和lambda表达式等都是纯右值。而将亡值是C++11新增的、 与右值引用相关的表达式,比如,将要被移动的对象、T&&函数返回值、std::move返回值和转换为T&&的类型的转换函数的返回值。

C++11中所有的值必属于左值、将亡值、纯右值三者之一,将亡值和纯右值都属于右值。区分表达式的左右值属性有一个简便方法: 若可对表达式用&取地址符,则为左值、否则为右值。

比如,简单的赋值语句:

int i = 0;

在这条语句中,i是左值,0是字面量,就是右值。在上面的代码中,i可以被引用,0就不可以了。字面量都是右值。


上一篇 C++11 &&的特性

下一篇 AOP介绍

Comments

Content