3.5.9 构造函数初始化程序
在如下类定义中:
类C的构造函数通过赋值语句对该类的两个数据成员进行初始化。但由于数据成员c是const类型的,因此对其做出的赋值操作是非法的。只要为构造函数添加一个初始化列表(constructor initializer,官方名称为ctor initializer)就可以解决这个问题。
例3-31
以下语句
列举了构造函数初始化列表的使用办法。在本例中,我们采用这种办法对const类型的数据成员c进行了初始化。
构造函数的初始化段(initialization section)由一个冒号:开始,紧跟在冒号之后的是需要进行初始化的数据成员,然后是由一对小括号括起来的初始值。在本例中,我们将数字0用一对小括号括起来,将其作为数据成员c的初值。这也是初始化const类型数据成员的惟一方法。
初始化列表仅在构造函数中有效,不能用于其他函数。构造函数的初始化列表可以初始化任何数据成员,但const类型数据成员不能用其他办法进行初始化。
例3-32
本例对例3-31进行了改动,将const数据成员c和非const数据成员x都放到初始化段当中。请注意数据成员的初始化顺序完全取决于它们在类当中声明的次序,与它们在初始化段中出现的次序无关。本例中,由于数据成员x在c之前声明,因此尽管x在初始化段中比c后出现,但x的初始化仍然先于c。
由于初始化列表已经完成了所有工作,我们看到的默认构造函数当中没有任何代码,这种编程(www.cppentry.com)风格是常见的。