ホームページ > バックエンド開発 > C++ > 暗黙的な移動コンストラクターと代入演算子が初期の C 11 ドラフトに存在しなかったのはなぜですか?

暗黙的な移動コンストラクターと代入演算子が初期の C 11 ドラフトに存在しなかったのはなぜですか?

Linda Hamilton
リリース: 2024-12-06 10:18:13
オリジナル
549 人が閲覧しました

Why Were Implicit Move Constructors and Assignment Operators Absent in Early C  11 Drafts?

初期の C 11 ドラフトにおける暗黙的な移動コンストラクターと代入演算子

C ではデフォルトのコピー コンストラクターと代入演算子が広く実装されているにもかかわらず、 C 11 標準の初期草案にはデフォルトの移動コンストラクターと代入演算子が存在しないため、一部の人々の間で疑問が生じました。

初期不在の理由

移動操作の暗黙的な生成は、C コミュニティ内で継続的な議論の対象となっています。 C 11 標準の初期のドラフトには、非可動型に依存するコードの保存に関する懸念から、これらの暗黙の機能が欠けていました。さらに、代入演算子を利用した移動不可能なオブジェクトに対する std::move の動作が問題を複雑にしていました。

現在の仕様

11 月の N3225 仕様の時点では、クラスは移動コンストラクターを明示的に定義しません。次のようにデフォルトとして暗黙的に宣言されます。条件:

  • ユーザー宣言のコピー コンストラクターがありません
  • ユーザー宣言のコピー代入演算子がありません
  • ユーザー宣言の移動代入演算子がありません
  • いいえユーザー宣言のデストラクター
  • 移動の暗黙的な削除はありませんconstructor

同様の条件が移動代入演算子の暗黙の宣言に適用されます。これらの変更は、N3203 および N3201 で概説されている原則と一致しており、暗黙的な移動生成の条件を厳しくすることを推奨しています。

回避策

初期段階で暗黙的な移動操作が存在しない場合C 11 ドラフトでは、回避策の 1 つは、移動代入演算子と移動コンストラクターを手動で実装することです。すべてのクラスでこれらの演算子を実装することを避けるために、マクロ ソリューションを使用できます。 Stack Overflow の質問における GManNickG の回答は、適切な例を示しています。

以上が暗黙的な移動コンストラクターと代入演算子が初期の C 11 ドラフトに存在しなかったのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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