1、非静态数据成员:按它们在类定义的声明顺序初始化,不会按它们在初始化列表的顺序。
2、静态数据成员:在main函数启动之前,并且只初始化一次
3、基类构造函数:如果类从一个或多个基类继承而来,基类的构造函数在子类的构造函数之前被调用
4、常量成员和引用成员:必须在初始化列表中初始化
参考代码:
class Base {
public:Base(int val) : base_val(val) {}
private:int base_val;
};class Derived : public Base {
public:Derived() : Base(10), a(5), b(a), c(15) {} // 基类Base先初始化private:int a; // 即使b在初始化列表中出现在a之前,a也会先初始化int b;int c;
};
在这个例子中,Derived类的构造函数首先调用base的构造函数,然后按照成员变量声明的顺序(即a,然后b,最后c)来初始化,即便在构造函数初始化列表中的顺序是不同的。
学习链接:https://github.com/0voice