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){...}
...
};