Bootstrap

面试:C++类成员初始化顺序

1、非静态数据成员:按它们在类定义的声明顺序初始化,不会按它们在初始化列表的顺序。

2、静态数据成员:在main函数启动之前,并且只初始化一次

3、基类构造函数:如果类从一个或多个基类继承而来,基类的构造函数在子类的构造函数之前被调用

4、常量成员和引用成员:必须在初始化列表中初始化

参考代码:

class Base {
public:
    Base(int val) : base_val(val) {}
private:
    int base_val;
};

class Derived : public Base {
public:
    Derived() : Base(10), a(5), b(a), c(15) {} // 基类Base先初始化

private:
    int a; // 即使b在初始化列表中出现在a之前,a也会先初始化
    int b;
    int c;
};

在这个例子中,Derived类的构造函数首先调用base的构造函数,然后按照成员变量声明的顺序(即a,然后b,最后c)来初始化,即便在构造函数初始化列表中的顺序是不同的。

学习链接:https://github.com/0voice

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;