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