swap函数

交换函数,可以避免精度损失。

c++11之前,swap参数列表中其实是赋值操作

template<classT>voidswap ( T& a, T& b )
{
  T c(a); a=b; b=c;
}

由于拷贝构造函数和赋值运算符包含内存拷贝操作,而这样的操作共执行了三次,所以在一个swap中一共存在三次内存拷贝的操作。这种不必要的内存操作很多情况下都会影响C++的执行效率。

C++11之后的swap引入了右值引用和数据移动的概念之后,代码变成下面的样子:

template<classT>voidswap (T& a, T& b)
{
  T c(std::move(a)); a=std::move(b); b=std::move(c);
}

std::move将变量类型转换为右值引用,使用内存移管代替了不必要的内存拷贝,因此效率会大大提高。

 

posted @ 2019-09-03 14:37  Austin_anheqiao  阅读(324)  评论(0编辑  收藏  举报