サーチ…


前書き

C ++がどうやって間違っていけるかの例をもっと見る

未定義の動作からの継続

初期化子リストの非静的メンバーを参照する

コンストラクタが実行を開始する前にイニシャライザリスト内の非静的メンバを参照すると、未定義の動作が発生する可能性があります。この時点ですべてのメンバーが構築されているわけではないため、この結果になります。標準草案から:

§12.7.1:コンストラクタが実行を開始する前にオブジェクトの非静的メンバまたは基本クラスを参照することで、非自明のコンストラクタを持つオブジェクトの場合、未定義の動作が発生します。

struct W { int j; };
struct X : public virtual W { };
struct Y {
   int *p;
   X x;
   Y() : p(&x.j) { // undefined, x is not yet constructed
   }
};


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow