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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值