我剛發現自己不完全理解std::move()
的邏輯。std :: move()如何將值傳遞到RValues中?
起初,我對它進行了搜索,但似乎只有關於如何使用std::move()
的文檔,而不是它的結構如何工作。
我的意思是,我知道模板成員函數是什麼,但是當我看着VS2010中的std::move()
定義時,它仍然令人困惑。
std :: 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);
}
是什麼奇怪的第一對我來說是參數,(_Ty & & _Arg),因爲當我打電話的功能就像你看到下面,
// main()
Object obj1;
Object obj2 = std::move(obj1);
它基本上等於
// std::move()
_Ty&& _Arg = Obj1;
但是,正如您已經知道的,您不能直接將LValue鏈接到RValue引用,這使我認爲它應該是這樣的。
_Ty&& _Arg = (Object&&)obj1;
然而,這是荒謬的,因爲的std ::移動()必須爲所有的值工作。
所以我想完全理解這是如何工作的,我也應該看看這些結構。
template<class _Ty>
struct _Remove_reference
{ // remove reference
typedef _Ty _Type;
};
template<class _Ty>
struct _Remove_reference<_Ty&>
{ // remove reference
typedef _Ty _Type;
};
template<class _Ty>
struct _Remove_reference<_Ty&&>
{ // remove rvalue reference
typedef _Ty _Type;
};
不幸的是,它仍然是混亂,我不明白。
我知道這都是因爲我缺乏關於C++的基本語法技巧。 我想知道這些工作是如何徹底的,我可以在互聯網上獲得的任何文件都會受到歡迎。 (如果你可以解釋這一點,那也會很棒)。
「我知道這都是因爲我缺乏關於C++的基本語法技巧。」那麼你還沒有準備好知道它是如何工作的。所有你需要知道的是如何編寫移動構造函數,以及何時以及如何在你想移動構造時使用'std :: move'。這個過程的細節,C++ 11用來使這個過程起作用的「深層魔力」不是你需要關注的東西。你根本就沒有知識的基礎來理解功能的特殊交互作用,從而使其全部工作。 –
尼科博拉斯說什麼。如果你知道自己缺乏基本技能,那麼這就是你需要首先解決的問題,而不是你無法理解std :: move! –
@NicolBolas恰恰相反,這個問題本身就表明OP在這個陳述中是自掏腰包的。正是OP掌握了基本的語法技巧,使他們甚至可以提出問題。 –