デフォルトの Move 実装が初期の C 11 ドラフトに存在しなかったのはなぜですか?

Barbara Streisand
リリース: 2024-11-19 19:13:02
オリジナル
180 人が閲覧しました

Why Were Default Move Implementations Absent in Early C  11 Drafts?

初期の C 11 ドラフトにデフォルトの移動実装が存在しないのはなぜですか?

C 11 標準の初期バージョンでは、移動コンストラクターと代入演算子の暗黙的な生成は議論の話題。これにより、後続のドラフトで変更が行われ、現在利用可能なコンパイラでは次の動作が行われるようになりました。

暗黙的な移動セマンティクス

C 標準 (N3225) の 11 月リリース以降、暗黙的な移動コンストラクターと代入が行われるようになりました。演算子は次の条件下で生成できます:

  • クラスにはユーザー宣言されたコピーがありませんコンストラクター。
  • クラスにはユーザー宣言のコピー代入演算子がありません。
  • クラスにはユーザー宣言の移動代入演算子がありません。
  • クラスにはユーザー宣言のデストラクターがありません.
  • 移動コンストラクターは暗黙的に次のように定義されません。

初期ドラフトに存在しないことの説明

初期ドラフトにデフォルトの移動コンストラクター/代入実装を含めないという決定は、混乱と予期しない動作の可能性を懸念した結果でした。 。ただし、その後のリビジョンでは、暗黙的な移動生成の条件を強化することでこれらの懸念に対処しました。

回避策

明示的な移動コンストラクター/代入演算子を作成せずに移動セマンティクスを利用する方法を探している場合、[GManNickG のマクロ](https://stackoverflow.com/a/12316884/8674521) を使用できます。このマクロは、クラスに必要な移動セマンティクスを生成します。

移動セマンティクスを実装することにより、スワップ メンバー関数の提供をオプトアウトすることもできます。

以上がデフォルトの Move 実装が初期の C 11 ドラフトに存在しなかったのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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