1. 成员初始化列表:
编译器真正初始化成员的顺序是按照它们在类中申明的次序的,而并不是列在成员初始化列表里的顺序
//成员初始化列表
class X
{
public:
X(int val):i(val),j(i){}
public:
int i;
int j;
}
下面这四种情况下是必须要用成员初始化列表语法来初始化成员的:
1.初始化一个reference member
2.初始化一个const member
3.调用一个base class的构造函数,而它拥有一组参数
4.调用一个member class的构造函数,而它拥有一组参数
当成员都是基本类型时,两种构造方法在效率上没有任何区别,当成员有class对象时,情况就不一样,在构造函数体中通过赋值运算符=进行初始化时,会产生临时对象,在用成员初始化列表进行构造时,会直接调用class 成员的copy 构造函数,效率上会有所提升,不过现在的编译器将做何种优化也视不同的编译器而异。