有两种方式可以初始化类的成员变量:构造函数成员初始化列表
和在构造函数体内使用大括号 {}
进行初始化。
class MyClass {
private:
int a;
int b;
public:
//在MyClass类中构造函数两种方式:
// 构造函数成员初始化列表
MyClass() : b(1), a(2) {}
// 在构造函数体内使用大括号进行初始化
MyClass() {
b = 1;
a = 2;
}
};
1.执行顺序的区别
- 构造函数成员初始化列表的执行顺序是由成员在类中的声明顺序决定的,而不是初始化列表中的顺序。
- 在构造函数体内使用大括号
{}
进行初始化时,初始化的执行顺序是按照成员在初始化列表中的顺序。
即上面示例构造函数成员初始化列表的初始化执行顺序是a再到b,而构造函数体内初始化是b到a。
初始化列表是为了在构造对象时提供成员变量的初始值,而构造函数体内的目的是执行其他与初始化无关的构造工作。
MyClass(int& refValue, const int constValue) : myReference(refValue), myConst(constValue) {
// 其他构造函数的初始化工作(如果有的话)
}