C++构造函数初始化按下列顺序被调用:
- 首先,任何虚拟基类的构造函数按照它们被继承的顺序构造;
- 其次,任何非虚拟基类的构造函数按照它们被继承的顺序构造;
- 最后,任何成员对象的构造函数按照它们声明的顺序调用;
class InitialA
{
public:
InitialA(int i) { printf("Initial A, i: %d\n", i); }
};
class InitialB
{
public:
InitialB(int i) { printf("Initial B, i: %d\n", i); }
};
class Initial
{
public:
Initial(): initialB(1), initialA(1) {}
~Initial() {}
private:
InitialA initialA;
InitialB initialB;
};
int main(int argc, char* argv)
{
Initial initial;
return 0;
}
运行结果如下:
Initial A, i: 1
Initial B, i: 1
根据以上结果可知: 对成员变量的初始化,是严格按照声明次序,而不是在初始化列表中的顺序进行初始化