ホームページ  >  記事  >  バックエンド開発  >  初期の C 11 ドラフトで暗黙的な移動セマンティクスが省略されたのはなぜですか?

初期の C 11 ドラフトで暗黙的な移動セマンティクスが省略されたのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-17 22:08:01910ブラウズ

Why Did Early C  11 Drafts Omit Implicit Move Semantics?

初期の C 11 ドラフトには自動移動セマンティクスが欠如

主に POD タイプと STL コンテナーを扱うプログラマーとして、明示的な割り当てを作成する演算子とコピー コンストラクターは、デフォルトの実装のためほとんど不要です。しかし、C 11 標準の初期草案には自動移動セマンティクスが存在しないため、使いやすさと安全性について懸念が生じました。

移動コンストラクターと代入演算子の暗黙的な生成は、多くの議論と改訂の対象となってきました。 C スタンダード。初期のドラフトでは、これらのセマンティクスは自動的には提供されず、追加のコーディング作業なしで移動機能を活用しようとするプログラマにとって課題となっていました。

現在の仕様 (N3225) では、暗黙的な移動生成に対してより厳しい条件が提供されています。暗黙的に宣言された移動コンストラクターを持つには、クラス X が次のようないくつかの基準を満たしている必要があります。

  • ユーザーが宣言したコピー コンストラクター、コピー代入演算子、移動代入演算子、またはデストラクターがない
  • 移動コンストラクターが暗黙的に削除済みとして定義されるのを防ぐ特定の条件を満たす

同様の表現が暗黙的な移動代入演算子にも適用されます。これらの制限は、暗黙的なセマンティクスとユーザー定義のセマンティクス間の潜在的な競合、および移動セマンティクスの誤用に関する懸念に対処するために導入されました。

初期の C 11 ドラフトには暗黙的な移動セマンティクスが欠如していたため、プログラマはこれらの関数を手動で実装する必要がありました。移動機能を利用したい場合。ただし、その後の標準の改訂ではこの問題が解決され、暗黙的な移動生成がより広く利用できるようになり、オブジェクト所有権管理のための移動セマンティクスの使用が簡素化されました。

以上が初期の C 11 ドラフトで暗黙的な移動セマンティクスが省略されたのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。