C++初始化顺序相关
C++初始化顺序相关
1. 设置函数默认参数的顺序: 从右到左
原因: 调用函数时填写参数的顺序是从左到右,因此默认参数必须从右到左给
2. 类的数据成员初始化列表初始化顺序为: 从右到左
例子:
class ClassA { public: ClassA():m_n2(0), m_n1(m_n2+2) {} void Print() { cout<<"m_n1: "<< m_n1 << " m_n2: "<< m_n2 <<endl; } ~ClassA() {} private: int m_n1; int m_n2; }; int _tmain(int argc, _TCHAR* argv[]) { ClassA obj; obj.Print(); return 0; }
输出结果: m_n1: 0xccccccce m_n2:0 (m_n2初始值为0xcccccccc)
3. 类的数据成员与构造函数的初始化顺序: 先初始化类的数据成员,再调用构造函数
原因: 调用构造函数的时候,构造函数可能需要访问数据成员,因此需要数据成员提前初始化好。
4. 类的数据成员与析构函数的销毁顺序: 先调用析构函数,再销毁类的数据成员
原因: 调用析构函数时,析构函数可能需要访问数据成员,因此需要数据成员稍后析构。
5. 构造函数的调用顺序(按照某大姐的说法:先有爷爷,再有父亲,再有儿子):
a. 基类构造函数 b. 子对象构造函数 c. 派生类构造函数
6. 析构函数的调用顺序:
a. 派生类的析构函数 b. 子对象的析构函数 c. 基类的析构函数
未完