C++类成员初始化顺序(声明初始化,初始化列表初始化和构造函数初始化)

初始化顺序: 成员变量声明时初始化-> 初始化列表初始化-> 构造函数初始化

注意:

初始化列表初始化参数的顺序是按照成员变量初始化顺序来实现的,当然构造函数内有自己的初始化顺序。

每一个成员变量都会走一遍初始化列表,如果初始化列表中未初始化,且声明时未初始化,则会初始化一个默认的随机值(也可能默认0)。

const成员变量必须在构造函数的参数初始化列表中进行初始化,C++11及以后可以在声明时初始化,但不能在构造函数里面初始化。

static成员初始化不能在类定义中,通过作用域限定符初始化

 类型 类名::变量名=值;

看一个实例:

#include
class TestA final {
    public:
        int a;
        int b = a;
        const int c = 12;
    TestA(int i): a(i) {
    }
};
int main () {
    A at(12);
    std::cout << at.b << std::endl;
    return 0;
}

输出值是:

12

如果调整a和b的顺序:

#include
class TestA final {
    public:
        int b = a;
        int a;
        const int c = 12;
    TestA(int i): a(i) {
    }
};
int main () {
    A at(12);
    std::cout << at.b << std::endl;
    return 0;
}

输出值是:

0

这是因为a未初始化之前,b先初始化,所以会给一个默认值。

end

你可能感兴趣的:(C++编程,1024程序员节,c++)