1. 必须使用初始化列表初始化一个引用成员;
class CBase { public: CBase(int a) : m_a(a) //正确,m_a是一个变量的引用,必须通过初始化列表初始化 { // m_a = a; //错误 cout << "m_a:" << m_a << endl; } public: int& m_a; };
2. 必须使用初始化列表初始化一个常量成员;
class CBase { public: CBase(int a) : m_a(a) //m_a是一个const常量,必须通过初始化列表初始化 { //m_a = a; //错误,此处相当于赋值操作,但是const是不可修改的,无法作为左值; } public: const int m_a; };
3. 初始化派生类的基类时,必须使用初始化列表进行初始化;
4. 当初始化话成员对象时,必须使用初始化列表进行初始化;
class CBase { public: CBase(int a) : m_a(a) //m_a是一个const常量,必须通过初始化列表初始化 { //m_a = a; //错误,此处相当于赋值操作,但是const是不可修改的,无法作为左值; } public: const int m_a; }; class CSub { public: CSub() : m_obj(88) //正确, 成员对象初始化 { cout << "this is m_obj::m_a = " << m_obj.m_a << endl; } public: CBase m_obj; };