ホームページ > バックエンド開発 > C++ > C メンバ初期化子リストでの初期化順序を保証するにはどうすればよいですか?

C メンバ初期化子リストでの初期化順序を保証するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-14 09:12:12
オリジナル
791 人が閲覧しました

How to Guarantee Initialization Order in C   Member Initializer Lists?

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

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 サイトの他の関連記事を参照してください。

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