引用初始化列表中的非靜態成員

在建構函式開始執行之前引用初始化程式列表中的非靜態成員可能導致未定義的行為。這是因為並非所有成員都是在此時構建的。從標準草案:

§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
   }
};