我剛讀到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我更新了問題,謝謝。 –
謝謝。這看起來沒有必要,但它可能是解決編譯器錯誤或限制的解決方法。 –