その名前に反して、std::move は物理的に何も移動しません。むしろ、オブジェクトを右辺値参照、より具体的には xvalue にキャストします。関数に move という名前を付ける決定は、騙したり混乱させるためではなく、コードを読みやすくするためでした。
右辺値参照の初期段階では、std::swap 関数はパフォーマンスを最適化する必要がありました。元のメソッドでは明示的な static_cast
std::move を導入することにより、明示的なキャストはコードの意図を強調する糖衣構文に置き換えられ、移動セマンティクスを有効にすることができました。 「右辺値へのキャスト」などの正確な技術的詳細を説明すると、追加の疑問が生じ、要点が曖昧になってしまうでしょう。
std:: の歴史move は 2002 年の右辺値参照の提案に遡ります。 move 関数は当初、次の構文糖として導入されました。 static_cast
C 言語が進化するにつれて、右辺値の概念は、今日私たちが値カテゴリとして知っているものに洗練されました。 。操作をより正確に説明するために、cast_to_xvalue などの別の名前を使用すると、読みやすさが損なわれる可能性があります。
本質的に、std::move は単純にオブジェクトをキャストします。 xvalueに変換します。このキャストは、簡単に移動可能なオブジェクトには影響しません。また、移動代入演算子を持つオブジェクトの場合、コピー代入演算子の代わりに移動代入演算子が確実に呼び出されます。
生成されたオブジェクト コードに関しては、std:: move は、自明な移動可能なオブジェクトには影響しません。移動代入演算子を含むオブジェクトの場合、オーバーロードの解決が変更される可能性があります。ただし、実行時には std::move は実質的になくなり、影響があるのはコンパイル時だけです。
以上が何も移動しないのに、なぜ `std::move` が `std::move` と呼ばれるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。