template<class _Ty> inline
void swap(_Ty& _Left, _Ty& _Right)
{ // exchange values stored at _Left and _Right
_Ty _Tmp = _Move(_Left);
_Left = _Move(_Right);
_Right = _Move(_Tmp);
}
我看了这个是从vs2010中看到的实现代码(CL)中的实现方式,用GCC看了下基本上是一样的(在转换的时候有一个static_cast 更加严谨 其他细节不提了)
)。
跟我们写一般的交换函数套路一样,传两个引用。swap他们就可。但是这里用到了一个Move操作。看下Move的实现
// TEMPLATE FUNCTION _Move
template<class _Ty> inline
typename tr1::_Remove_reference<_Ty>::_Type&&
_Move(_Ty&& _Arg)
{ // forward _Arg as movable
return ((typename tr1::_Remove_reference<_Ty>::_Type&&)_Arg);
}
// TEMPLATE _Remove_reference
template<class _Ty>
struct _Remove_reference
{ // remove reference
typedef _Ty _Type;
};
Move是为了挪用临时变量,将临时变量中的内容放入到用到Operator=的对象中,置空了临时变量。以提高性能。其实很多地方都可以用到Move 。处理没有用的临时变量,其实不一定是临时变量。只要是没有用的。
我是觉得非常好用。标准库有的的不必自己去实现了的,除非不能实现你想要的swap。亦或是。。。。
随意。