12

std::move機能がよくわかりません

template <class T>
typename remove_reference<T>::type&&
move(T&& a)
{
    return a;
}

なぜremove_referenceですか?誰かが私に簡単な説明をしてもらえますか?

4

2 に答える 2

17

Tたとえば、左辺値参照の場合に何が起こるかを考えてくださいMyClass &。その場合、T &&はになりMyClass & &&参照折りたたみルールにより、これは再びに変換さMyClass &れます。正しい結果を得るには、typename remove_reference<MyClass&>::type&&最初に型から参照装飾を削除して、MyClass &にマップしMyClass、次に右辺値参照を適用して、を生成しMyClass &&ます。

于 2011-04-03T12:05:45.870 に答える
7

左辺値参照への右辺値参照は左辺値参照に減衰し、左辺値参照を再取得すると、から期待するものとは異なるセマンティクスを持つためです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

于 2011-04-03T11:55:50.847 に答える