std::move
機能がよくわかりません
template <class T>
typename remove_reference<T>::type&&
move(T&& a)
{
return a;
}
なぜremove_reference
ですか?誰かが私に簡単な説明をしてもらえますか?
std::move
機能がよくわかりません
template <class T>
typename remove_reference<T>::type&&
move(T&& a)
{
return a;
}
なぜremove_reference
ですか?誰かが私に簡単な説明をしてもらえますか?
T
たとえば、左辺値参照の場合に何が起こるかを考えてくださいMyClass &
。その場合、T &&
はになりMyClass & &&
、参照折りたたみルールにより、これは再びに変換さMyClass &
れます。正しい結果を得るには、typename remove_reference<MyClass&>::type&&
最初に型から参照装飾を削除して、MyClass &
にマップしMyClass
、次に右辺値参照を適用して、を生成しMyClass &&
ます。
左辺値参照への右辺値参照は左辺値参照に減衰し、左辺値参照を再取得すると、から期待するものとは異なるセマンティクスを持つためですmove
。
編集:ええと、なぜ反対票を投じるのですか?このコードをチェックしてください:
template < typename T > T&& func(T&& x) { return x; }
int main()
{
int x;
int &y = func(x);
}
さらに読む:http ://www.justsoftwaresolutions.co.uk/cplusplus/rvalue_references_and_perfect_forwarding.html