「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 実際には何も移動しないのに、なぜ `std::move` が `std::move` と呼ばれるのでしょうか?

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

2024 年 11 月 16 日に公開
ブラウズ:793

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 関数は、その名前が操作の技術的な詳細を完全に捉えていない場合でも、プログラマーが移動セマンティクスを簡潔に表現できる貴重なユーティリティであり続けます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3