构造函数初始化列表有时是必要的。虽然构造函数分为初始化和计算阶段,使用初始化构造函数列表效率要高一些,这是其一,而且有些情况下必须使用,下面是一例,
1 class Foo 2 { 3 public: 4 Foo(int x, int y): a(x), b(y) {} 5 6 private: 7 int a; 8 int b; 9 }; 10 11 class Bar 12 { 13 public: 14 Bar(): foo(10, 10) {} 15 private: 16 Foo foo; 17 };
成员 foo 的类型没有默认构造函数,初始化阶段调用默认构造函数就会失败,如果没有 bar 构造函数初始化列表的话。
所以必须对任何const,引用类型成员以及没有默认构造函数类类型的成员使用初始化列表。