std::move(x) 関数は、実際には物理データに関しては何も移動しません。これは本質的に右辺値、特に xvalue へのキャストです。このキャスティングは混乱を招く可能性があるため、命名規則の背後にある意図を理解することが重要です。
移動の元の概念は、2002 年の最初の移動提案にまで遡ります。この提案では、右辺値参照が導入され、その方法が示されました。より効率的な std::swap を作成します。当時、「&&」に関連付けられている唯一の意味は論理的なものであったため、関数の意図を伝えるために、より読みやすい方法が必要でした。
開発者は、「cast_to_rvalue」または同様の名前を使用する代わりに、キャストの目的、つまり移動セマンティクスを有効にすることを強調するために「move」を選択しました。この命名規則は、値のカテゴリに関する技術的な詳細に立ち入ることなく、コードの意図を明確にするのに役立ちます。
今日では、初心者のプログラマがその内容を理解できる一方で、職人の C プログラマは std::move が本質的にキャストであることを認識する必要があります。目的は、ソースからコピーするのではなく、ソースから移動することです。他の開発者は、必要に応じて別の名前で同様の機能を実装できます。これは、std::move がこの機能を独占していないことを示しています。
生成されたオブジェクト コードに関しては、std::move は自明な影響を与えません。可動オブジェクト。ただし、カスタムの移動代入演算子を含むオブジェクトの場合、 std::move はどのオーバーロードが呼び出されるかに影響を与える可能性があり、パフォーマンスが向上する可能性があります。
全体として、std::move の「move」という名前は教育的です。技術的な実装ではなく、関数の意図を強調して目的を説明します。
以上が実際にデータを移動していないにもかかわらず、std::move が std::move という名前になっているのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。