面试题答案
一键面试#include <iostream>
class CustomClass {
public:
CustomClass() {
std::cout << "CustomClass default constructor" << std::endl;
}
};
class MyClass {
private:
int intValue;
double doubleValue;
CustomClass customObj;
public:
MyClass(int i, double d) : intValue(i), doubleValue(d), customObj() {
// 这里的构造函数体可以为空,初始化工作在初始化列表完成
}
};
使用初始化列表有时是必要的,特别是对于自定义类类型的成员变量,原因如下:
- 效率更高:对于自定义类类型的成员变量,在构造函数体中赋值会先调用默认构造函数创建对象,然后再调用赋值运算符进行赋值。而使用初始化列表则直接调用合适的构造函数进行初始化,减少了一次默认构造和一次赋值操作,提高了效率。
- 某些情况必须使用:当自定义类没有默认构造函数,只有带参数的构造函数时,在构造函数体中无法对其进行赋值操作,必须在初始化列表中调用带参数的构造函数来初始化该成员变量。