在C++11中,标准库在<utility>中提供了一个有用的函数std::move,std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义,确切地说,它使一个值易于移动。从实现上讲,std::move基本等同于一个类型转换:static_cast<T&&>(lvalue);
std::move函数可以以非常简单的方式将左值引用转换为右值引用。当我们在设计类的时候,都应该尽量去实现移动构造函数。
再来讨论std::swap, 通常,当我们需要交换两个变量的值的时候,使用3次复制的方法,如以下代码:
void swap(int& a, int& b)
{
int tmp = a;
a = b;
b = tmp;
}
然后,当需要交换类型更大的数据时,此种方法的代价是昂贵的。我们只需要移动而不必要去复制,从而缩小交换的代价。
// std::swap函数的实现
template<class T>
void swap(T &x, T& y)
{
T temp = std::move(x);
x = std::move(y);
y = std::move(temp);
}