在构造函数中,有时必须使用初始化列表对对象成员进行初始化。
如果不使用初始化列表,而是在构造函数函数体内进行赋值,例如构造函数如下所示:
calss A{
public:
A()
{
a = 0;
b = 0;
}
pravite:
int a;
int b;
};
那么在创建一个A类型的对象时,A tmp,此时将会默认调用无参构造函数,构造的过程首先对对象的数据成员a、b进行初始化,然后再在无参构造函数体内对数据成员a、b进行重新赋值。
如果数据成员对应的类型没有无参构造函数,那么以上过程中对数据成员的初始化就会出现错误。
如果数据成员为const或者引用类型,那么在无参构造函数体内对数据成员进行赋值的操作就会失败。
例如,如果类A定义如下所示:
calss A{
public:
A()
{
a = 0;
b = 0;
}
pravite:
const int a;
int b;
};
那么无参构造函数就会出现错误,因为无法对a进行赋值。此时类定义应该改为:
calss A{
public:
A():a(0)
{
b = 0;
}
pravite:
int a;
int b;
};
所以,必须对为const或者引用类型以及没有无参构造函数的类类型的任何成员使用初始化列表。
成员初始化次序与成员初始化列表中的成员顺序无关,初始化的次序和类中定义成员顺序一致。