成员初始化列表

发布时间 2023-12-10 14:46:16作者: ponder776

成员初始化列表是C++中的一个特性,它允许在构造函数中对类的成员变量进行初始化。成员初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。例如:

class MyClass {
public:
    MyClass(int a, int b) : m_a(a), m_b(b) { }
private:
    int m_a;
    int m_b;
};

在这个例子中,MyClass的构造函数使用成员初始化列表来初始化m_am_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_yym_mycBasecmysub1