ホームページ >バックエンド開発 >C++ >C 11 コンパイラはいつ移動操作を自動的に生成しますか?

C 11 コンパイラはいつ移動操作を自動的に生成しますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-27 07:53:12219ブラウズ

When Does the C  11 Compiler Automatically Generate Move Operations?

移動操作の自動生成のルール

C 11 では、移動操作を自動的に生成するコンパイラの機能は、コピー操作のルールとは異なります。 C 98.

移動コンストラクターと移動代入演算子

次の条件下では、コンパイラーは移動コンストラクターと移動代入演算子を自動的に生成します:

  • クラスにはユーザー宣言されたコピー コンストラクターがありません。
  • クラスには、ユーザーが宣言したコピー代入演算子がありません。
  • クラスには、明示的に宣言された移動コンストラクターがありません。

移動操作が自動的に生成されないケース

次の条件のいずれかが満たされる場合、コンパイラは移動操作を自動的に生成しません。 :

  • クラスには、ユーザーが宣言したコピー コンストラクターやコピー代入があります。演算子。
  • クラスには、明示的に宣言されているが定義されていない移動コンストラクターまたは移動代入演算子があります。
  • クラスはデストラクターを宣言しています。

自動生成ルールを検証するツール

次のリソースは、自動生成ルールを視覚的に表現したものです。移動操作を含む特別メンバーの説明:

[Howard Hinnant の ACCU 2014 プレゼンテーション スライドの画像](https://i.sstatic.net/b2VBV.png)

追加の説明

表内の赤い四角は、非推奨の動作を示します。非推奨への依存を避けたい場合は、C 98/03 の「3 のルール」に従うことを検討してください。デストラクターを宣言する場合は両方のコピー メンバーを宣言するか、少なくとも 1 つのコピー メンバーを宣言します。

以上がC 11 コンパイラはいつ移動操作を自動的に生成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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