ホームページ >バックエンド開発 >C++ >C クラスの非静的データ メンバーの初期化順序は何ですか?

C クラスの非静的データ メンバーの初期化順序は何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-18 15:12:14382ブラウズ

What's the Initialization Order of Non-Static Data Members in C   Classes?

C での非静的データ メンバーの初期化順序

非静的データ メンバーを含むクラスの新しいインスタンスを作成する場合、初期化される順序は、オブジェクトを適切に構築するために非常に重要です。

このシナリオでは、次のことを考慮してみましょう。 code:

class A {};
class B {};
class X
{
    A a;
    B b;
};

クラス X のコンストラクターが呼び出されるとき、どちらのコンストラクター (A または B) が最初に呼び出されるのかという疑問が生じます。クラス定義内のそれらの位置によって順序が決まりますか?

C 標準のセクション 12.6.2 によると、初期化の順序は次のとおりです:

  • まず、仮想基本クラスは次のとおりです。初期化されました (この場合は適用されません)。
  • 直接の基本クラスは宣言順に初期化されます (これも適用されません)
  • 非静的データ メンバーは、クラス定義に出現する順序で初期化されます。
  • 最後に、コンストラクター本体が実行されます。

したがって、提供されたコードでは、非静的データ メンバー a と b が の順序で初期化されます。 が宣言されており、最初に a が続き、次に b が続きます。 A のコンストラクターは、B のコンストラクターの前に呼び出されます。

要約すると、非静的データ メンバーの初期化順序は、コンストラクター内での配置ではなく、クラス定義内での宣言順序によって決まります。体。

以上がC クラスの非静的データ メンバーの初期化順序は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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