初期の C 11 ドラフトにおける暗黙的な移動コンストラクターと代入演算子
C ではデフォルトのコピー コンストラクターと代入演算子が広く実装されているにもかかわらず、 C 11 標準の初期草案にはデフォルトの移動コンストラクターと代入演算子が存在しないため、一部の人々の間で疑問が生じました。
初期不在の理由
移動操作の暗黙的な生成は、C コミュニティ内で継続的な議論の対象となっています。 C 11 標準の初期のドラフトには、非可動型に依存するコードの保存に関する懸念から、これらの暗黙の機能が欠けていました。さらに、代入演算子を利用した移動不可能なオブジェクトに対する std::move の動作が問題を複雑にしていました。
現在の仕様
11 月の N3225 仕様の時点では、クラスは移動コンストラクターを明示的に定義しません。次のようにデフォルトとして暗黙的に宣言されます。条件:
同様の条件が移動代入演算子の暗黙の宣言に適用されます。これらの変更は、N3203 および N3201 で概説されている原則と一致しており、暗黙的な移動生成の条件を厳しくすることを推奨しています。
回避策
初期段階で暗黙的な移動操作が存在しない場合C 11 ドラフトでは、回避策の 1 つは、移動代入演算子と移動コンストラクターを手動で実装することです。すべてのクラスでこれらの演算子を実装することを避けるために、マクロ ソリューションを使用できます。 Stack Overflow の質問における GManNickG の回答は、適切な例を示しています。
以上が暗黙的な移動コンストラクターと代入演算子が初期の C 11 ドラフトに存在しなかったのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。