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

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

注意:

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

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

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

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

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

看一个实例:

#include<iostream>
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<iostream>
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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值