我刚读到Visual Studio的STL实现的algorithm.h头回来,我发现下面的代码时使用招:为什么的std ::这个功能
template<class _InIt,
class _Fn1> inline
_Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func)
{ // perform function for each element
_DEBUG_RANGE(_First, _Last);
_DEBUG_POINTER(_Func);
_For_each(_Unchecked(_First), _Unchecked(_Last), _Func);
return (_STD move(_Func));
}
...代码的重要组成部分是:
template<class _InIt, class _Fn1>
inline _Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func)
{ // perform function for each element
_For_each(_Unchecked(_First), _Unchecked(_Last), _Func);
return (std::move(_Func));
}
...这里是_For_each
功能的签名
template<class _InIt,
class _Fn1> inline
void _For_each(_InIt _First, _InIt _Last, _Fn1& _Func)
而我的问题是为什么在这种情况下返回时需要std::move
? 并且为了完成这个问题:在退出函数时需要什么样的情况下使用std::move
?我认为以务实的方式获取这些信息可能会有所帮助。
能否请您展开所有的宏?如果我们看不到它,就不可能知道代码的作用。 –
@KerrekSB我更新了问题,谢谢。 –
谢谢。这看起来没有必要,但它可能是解决编译器错误或限制的解决方法。 –