ホームページ > バックエンド開発 > C++ > C コンパイラはいつ移動コンストラクターと代入演算子を自動的に生成しますか?

C コンパイラはいつ移動コンストラクターと代入演算子を自動的に生成しますか?

DDD
リリース: 2024-12-19 09:34:10
オリジナル
283 人が閲覧しました

When Do C   Compilers Automatically Generate Move Constructors and Assignment Operators?

C での移動操作の自動生成

C 98 では、コンパイラはクラスのコピー コンストラクターとコピー代入演算子を自動的に生成できました。ただし、C 11 での移動セマンティクスの導入により、移動操作の自動生成について疑問が生じます。

移動コンストラクターと移動代入演算子は自動的に生成されますか?

いいえ、コピー コンストラクターやコピー代入演算子とは異なり、コンパイラーはユーザー定義のコンストラクターや代入を含むクラスの移動操作を自動的に生成しません。演算子。

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

次の場合、移動操作は自動的に生成されません。

  • クラスにユーザーがある-定義されたコンストラクターまたはコピー コンストラクター。
  • クラスにはユーザー定義の代入演算子またはコピー代入があります。演算子。
  • クラスには非自明なデストラクタがあります。
  • クラスには非自明なデストラクタを持つ基本クラスがあります。
  • クラスにはコピー不可能な or が含まれています。移動不可能なメンバー。

移動の自動生成の決定操作

クラスに対して移動操作が自動的に生成されるかどうかを判断するには、次の点を考慮してください。

  • クラスにデフォルトのコンストラクターのみがあり、ユーザー定義のコンストラクターがない場合、または代入演算子、移動演算が生成されます。
  • クラスにユーザー定義のコンストラクターまたは代入演算子がある場合は、移動を明示的に宣言する必要があります。操作。
  • クラスに自明ではないデストラクター、または自明ではないデストラクターを持つ基本クラスがある場合、移動操作を明示的に宣言する必要があります。

自動の非推奨移動操作の生成

C 20 では、移動操作の自動生成は次のようになります。クラスがデストラクターまたはコピー メンバー (コピー コンストラクター、コピー代入演算子) を宣言している場合は非推奨になります。 C の将来のバージョンとの互換性を確保するには、移動操作を必要とするクラスの移動操作を明示的に宣言することをお勧めします。

以上がC コンパイラはいつ移動コンストラクターと代入演算子を自動的に生成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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