C++类_类对象的初始化顺序

目录

静态优先 

 虚基类特殊处理

 基类先行

列表优先于体


     C++11 中类对象的初始化顺序较为复杂,涉及到基类、成员变量、静态成员等多方面,顺序一般为基类初始化,初始化列表,构造函数。当多个基类,初始化列表多个变量时,按照声明顺序。多个基类时,关注下虚基类优先的原则。
以下是对其初始化顺序的细化说明以及相应的例子。

静态优先 

       程序启动时,静态成员变量率先初始化,const 整型和 constexpr 类型若在类内初始化,于编译时完成;其他静态成员变量则需类外定义初始化。静态成员函数在程序加载时就绪,无特定初始化流程。

#include <iostream>
class StaticClass {
public:
    static const int CONST_VALUE = 10;  // 类内初始化const整型
    static constexpr int CONSTEXPR_VALUE = 20;  // 类内初始化constexpr类型
    static int normalStaticVar;  // 普通静态成员变量
    static void staticFunc() {
        std::cout << "Static function called" << std::endl;
    }
};
int StaticClass::normalStaticVar = 30;  // 类外初始化普通静态成员变量
int main() {
    StaticClass::staticFunc();
    std::cout << "CONST_VALUE: " << StaticClass::CONST_VALUE << std::endl;
    std::cout << "CONSTEXPR_VALUE: " << StaticClass::CONSTEXPR_VALUE << std::endl;
    std::cout << "normalStaticVar: " << StaticClass::normalStaticVar << std::endl;
    return 0;
}
renhl252@renhl:~/usb/cplusplus$ make
g++ -g -std=c++11 main.cpp
./a.out
Static function called
CONST_VALUE: 10
CONSTEXPR_VALUE: 20
normalStaticVar: 30
renhl252@renhl:~/usb/cplusplus$

 初始化顺序分析:

  1. 编译时初始化 CONST_VALUE 和 CONSTEXPR_VALUE
    • static const int CONST_VALUE = 10;CONST_VALUE 是 const 整型静态成员变量,由于在类内进行了初始化,编译器在编译阶段就能确定其值为 10
    • static constexpr int CONSTEXPR_VALUE = 20;CONSTEXPR_VALUE 是 constexpr 类型的静态成员变量,同样在类内初始化,编译器在编译时会将其值初始化为 20
  2. 程序启动时初始化 normalStaticVar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值