成员初始化列表是C++中的一个特性,它允许在构造函数中对类的成员变量进行初始化。成员初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。例如:
class MyClass {
public:
MyClass(int a, int b) : m_a(a), m_b(b) { }
private:
int m_a;
int m_b;
};
在这个例子中,MyClass
的构造函数使用成员初始化列表来初始化m_a
和m_b
。
成员初始化列表的主要优势是提高程序运行效率。对于类类型成员变量,放到初始化列表中能够比较明显地看到效率的提升,但是如果是个简单类型的成员变量,比如 int m_test
,其实放在初始化列表或者放在函数体里效率差别不大1。
此外,有些情况下必须使用成员初始化列表:
- 该类的成员变量是个引用。
- 该类的成员变量是const类型。
- 该类是继承一个基类,并且基类中有构造函数,构造函数里有参数。
- 该类的成员变量类型是类类型,而该类的构造函数带参数时。
例如:
class Base {
public:
Base(int tmpa, int tmpb) { }
};
class CSub {
public:
CSub(int tmpv) { }
};
class A : public Base {
public:
int &m_yy;
const int m_myc;
CSub cmysub;
A(int &tmpvalue) : m_yy(tmpvalue), m_myc(tmpvalue), Base(tmpvalue, tmpvalue), cmysub(tmpvalue) {
m_x = 0;
m_y = 0;
m_yy = 180;
}
};
在这个例子中,A
的构造函数使用成员初始化列表来初始化m_yy
、m_myc
、Base
和cmysub
1。