Skip to content

Latest commit

 

History

History
23 lines (17 loc) · 749 Bytes

File metadata and controls

23 lines (17 loc) · 749 Bytes

73、右值引用

C++03 及之前的标准中,右值是不允许被改变的,实践中也通常使⽤ const T& 的⽅式传递 右值。然⽽这是效率低下的做法,例如

Person get(){
 Person p;
 return p;
}
Person p = get();

上述获取右值并初始化 p 的过程包含了 Person 的3个构造过程和2个析构过程。 这是 C++ 受诟病的⼀点,但C++11 的右值引⽤特性允许我们对右值进⾏修改。借此可以实现 move语 义 ,即从右值中直接拿数据过来初始化或修改左值, 而且不需要重新构造左值后再析构右值。⼀个 move 构造函数是这样声明的:

class Person{
public:
 Person(Person&& rhs){...}
 ...
};