018 default initialization
Contents
Default Initialization[1]
| |
默认初始化场景
- 具有
automatic(栈上)、static、thread-local生命周期的对象未显示初始化 new创建的dynamic(堆上)生命周期的变量未显示初始化- 非静态成员变量、基类在构造函数初始化列表中未显示初始化
默认初始化行为
- 若是
class类型,则使用默认构造函数进行初始化 - 若是
array类型,则每个元素各自进行默认初始化 - 其他情况,默认初始化什么也不做
然而比较具有迷惑性的是,例如像全局静态变量static int i;中i会被初始化为0,与以上行为并不一致。这里比较有意思,c++在概念上将初始化过程描述为两个阶段:Static initialization[2]、Dynamic initialization,此处i初始化为0是Static initialization中Zero initialization的结果,默认初始化(Dynamic initialization)什么也没做。
参考资料
[1] Default initialization. https://en.cppreference.com/w/cpp/language/default_initialization
[2] Initialization. https://en.cppreference.com/w/cpp/language/initialization
Author 朦呆农码
LastMod 2021-03-01