- 使用初始化列表的构造函数,其显式地对成员进行初始化
- 未使用初始化列表的构造函数,其通过赋值来对成员进行初始化(此赋值为拷贝构造)
分析一下:
第一种方式,只需要在进入函数体前对对象进行一次构造,然后初始化。
第二种方式,第一次构造与上相同,拷贝构造函数需要第二次构造,故多了一次构造
故当变量为自己设计的类时,可以提高性能。
对内置类型成员变量,两种构造方式性能与结果相同。
对非内置类型成员变量,为了避免两次构造,推荐使用构造函数初始化列表。
在以下两种情况必须使用构造函数初始化列表;
- 没有默认构造函数的类。若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。
- const 成员 或 引用类型的成员。因为 const 对象或引用类型只能初始化,不能对他们进行重新赋值。
网友评论