13

関数std::move()は次のように定義されます

template<typename T>
typename std::remove_reference<T>::type&& move(T && t)
{ 
    return static_cast<typename std::remove_reference<T>::type&&>( t ); 
}

移動コンストラクターが呼び出されることを想像できる場所は4つあります。

  1. パラメータが渡されたとき。
  2. キャストが行われたとき。
  3. 結果が返されたとき。
  4. 関数自体ではなくstd::move()、返される参照が最終的に到着する場所にある可能性があります。

4番に賭けますが、100%確信が持てないので、答えを説明してください。

4

2 に答える 2

8

移動工事は行われていません。std::move()参照を受け入れ、参照を返します。std::move()基本的には単なるキャストです。

あなたの推測4.は正しいものです(あなたが実際に最後にmoveコンストラクターを呼び出していると仮定します)。

于 2013-02-07T11:44:10.607 に答える
3

std :: moveは単なる型キャストであり、型が右辺値であることをコンパイラーに通知します。

于 2013-02-07T11:36:15.567 に答える