最近cppreference.comでブラウズしていましたが、私は何も知らなかった関数this page about std::moveを発見しました。このページでStd ::コンパイラで移動保証
、明確に別段の定めがない限り、から移動してきたすべての 標準ライブラリのオブジェクトは有効ですが、不特定の状態に置かれ
ことが述べられています。
したがって、C++標準では、std::move
の後に変数の内容について何も保証されません。私を悩ましている部分は、「特に指定しない限り」です。
私が知りたいのは、GCCやVisual C++などのコンパイラが変数の内容を保証しているかどうかです。 Visual Studio 2013でstring
を使用した簡単なテストでは、move
の操作後に文字列が常に空であることがわかりました。
* "標準ライブラリオブジェクト" *の場合、指定された状態の移動元オブジェクトの例は 'std :: unique_ptr'です。 – LogicStuff
その引用したセクションに続く例は十分にはっきりしていませんか? –
std :: moveはオブジェクトに対して何もしません。渡されたオブジェクトへのrvalue参照を返します。 http://stackoverflow.com/questions/3413470/what-is-stdmove-and-when-should-it-be-used – kfsone