C++ std::move与std::swap

在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);
}

 

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页