ホームページ > バックエンド開発 > C++ > C コンストラクターのメンバーの初期化順序がイニシャライザー リストの順序と異なるのはなぜですか?

C コンストラクターのメンバーの初期化順序がイニシャライザー リストの順序と異なるのはなぜですか?

Patricia Arquette
リリース: 2024-12-19 04:12:50
オリジナル
534 人が閲覧しました

Why Does Member Initialization Order in C   Constructors Differ from the Initializer List Order?

メンバー初期化子リストの評価順序

クラス メンバーを初期化するコンストラクターを使用する場合、これらの初期化が発生する順序を理解することが重要です。予期された初期化順序に従わず、予期しない動作が発生したシナリオを見てみましょう。

提供されたコードでは、クラス A がメンバー変数 a_ と b_ で定義されています。コンストラクターは引数を受け取り、両方のメンバーを初期化します。プログラマは、メンバーがリストされた順序 (最初に a_、次に b_) で初期化されると想定しました。ただし、特定のインスタンスでは、b_ が a_ より前に初期化され、初期化前に a_ が参照されたときに中止が発生することが観察されました。

初期化の正しい順序を確認するには、順序が次のとおりであることを理解しておくことが重要です。クラス定義内のデータ メンバー宣言によって決定されます。上の例では、クラス内で最初に a_ が宣言され、次に b_ が続きます。したがって、メンバー初期化子リスト内の順序に関係なく、a_ は常に b_ より前に初期化され、プログラマが遭遇した問題は解決されます。

以上がC コンストラクターのメンバーの初期化順序がイニシャライザー リストの順序と異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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