1 必须使用初始化列表

必须用带有初始化列表的构造函数情况:

  1. 如果成员类型是没有默认构造函数的类。

    若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。比如:A是B类的成员,A存在一个默认有参构造函数,就不会存在默认无参构造函数。如果没有初始化函数列表,就会报错。

  2. const成员或者引用类型的成员。因为这类型需要创建的时候就需要被初始化。

除了以上必须使用初始化列表的情况,普通成员也可以使用初始化列表进行初始化。

2 初始化列表赋值执行顺序

alt text