メンバー初期化子リストの初期化順序
C では、コンストラクターはメンバー初期化子リストを使用してメンバー変数を初期化することがよくあります。ただし、これらの変数が初期化される順序は混乱を招く可能性があります。
次のコンストラクターを考えてみましょう:
class A { public: OtherClass a_; AnotherClass b_; A(OtherClass o, string x, int y) : a_(o) , b_(a_, x, y) {} };
問題:
元々は、変数は、初期化子リストにリストされている順序 (最初に a_、次に b_) で初期化されると想定されています。ただし、変数が逆の順序で初期化されていることが判明したときに問題が発生しました。
質問:
確実に初期化の順序を制御するにはどうすればよいですか? a_ は前に初期化されますb_?
答え:
初期化の順序は、クラス内のデータ メンバー宣言の順序によって異なります。この例では、a_ が b_ より前に宣言されているため、最初に初期化されます。
したがって、初期化の順序を確実にするには、クラス定義内でデータ メンバーを正しい順序で宣言することが重要です。
以上がC メンバ初期化子リストでの初期化順序を保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。