実際には何も移動しないのに、なぜ `std::move` が `std::move` と呼ばれるのでしょうか?

Susan Sarandon
リリース: 2024-11-15 18:01:03
オリジナル
545 人が閲覧しました

Why is `std::move` Called `std::move` if it Doesn't Actually Move Anything?

std::move はなぜ std::move という名前なのでしょうか?

std::move 関数は、その名前にもかかわらず、実際に何かを動かします。これは単に左辺値 (オブジェクトを参照する式) を右辺値 (一時オブジェクトを表す式) に変換するだけです。この変換は、xvalue カテゴリへのキャストを通じて実行され、lvalues や prvalues とは異なります。

この名前を選択した理由は、概念の歴史に遡ります。もともと、移動操作は、値をコピーせずに効率的に交換する方法として導入されました。このための初期の構文には、static_cast を使用して左辺値を右辺値にキャストすることが含まれていました。可読性を向上させ、これらのキャストの意図を伝えるために、move キーワードが static_cast の糖衣構文として導入されました。

当時の文脈では、「move」という用語の使用は、これらのキャストの目的を示すことを意味していました。 : 移動セマンティクスを有効にします。その結果、コードは正確な技術的なアクション (右辺値へのキャスト) を伝えるのではなく、望ましい結果 (オブジェクトの移動) を伝えることになります。

長年にわたり、左辺値と右辺値の概念は次のように進化してきました。現在の値カテゴリ。xvalue は右辺値にキャストされたオブジェクトを表します。その結果、move キーワードは、内部で発生するかどうかのアクションのみを暗示しているため、誤解を招く可能性があります。

ただし、読みやすさを維持するために、move キーワードの使用の選択は維持されています。また、cast_to_xvalue のような馴染みのない構文によって生じる可能性のある混乱を回避します。 std::move 関数は、その名前が操作の技術的な詳細を完全に捉えていない場合でも、プログラマーが移動セマンティクスを簡潔に表現できる貴重なユーティリティであり続けます。

以上が実際には何も移動しないのに、なぜ `std::move` が `std::move` と呼ばれるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート