语法
在构造函数的()之后,冒号开头,逗号分隔,括号传参,这一段就是初始化列表,随后是在{}里写构造函数内容。
1 | Example(argv):a(1),b(2) |
初始化作用
无法赋值的成员,必须使用初始化列表进行初始化
例如假设有个类成员,它本身是个没有默认构造函数的类。
1 | class CMember |
我们都知道此时CMember* pm=new CMember;
是错误的,必须调用有参数的构造函数。
此时 CMember 是另一个类的成员时,我们怎么初始化呢?
1 |
|
因为 m_member 不存在默认构造函数,所以不能在构造函数里 默认初始化后再对其赋值,只能使用初始化列表的方式。
常量对象和引用对象也是一样,只能被初始化。
效率相关
和上例类似,假如 CMember 存在默认构造函数呢?那我们是可以在 CMyClass 函数体内对其赋值的。
但是此时编译过程是————先调用 CMember 的默认构造函数,再调用拷贝构造函数,即需两次函数运算。
而假如是初始化列表,则直接调用相应的带参数的构造函数。