在this topic 他们说零初始化不是静态初始化。
谁能解释一下为什么?
3.6.2/2 说:
Together, zero-initialization and constant initialization are called static initialization;
是静态初始化的定义,即零初始化是静态初始化,常量初始化是静态初始化
最佳答案
此答案假定您知道静态存储持续时间 的含义。
在 C++03 中,这被指定为 (3.6.2):
Objects with static storage duration (3.7.1) shall be zero-initialized (8.5) before any other initialization takes place. Zero-initialization and initialization with a constant expression are collectively called static initialization; all other initialization is dynamic initialization.
在实践中,一个程序有不同的内存段,它存储具有静态存储持续时间的变量:
- 一段通常称为
.bss
,其中存储所有初始化为零的静态存储变量。 - 另一个段通常称为
.data
,其中存储所有显式初始化为值的静态存储变量。 - 此外,还有一个名为
.rodata
的段,其中存储了所有const
变量。
(这两个不同的段的原因主要是程序启动性能,你可以阅读更多关于here的内容。)
零初始化适用于存储在.bss
中的所有变量,常量初始化适用于存储在.data
中的所有变量。 (也许常量初始化也适用于 .rodata
,这取决于您的系统是基于 RAM 还是具有真正的 ROM)。
总的来说,所有这些都称为静态初始化,因为它适用于具有静态存储持续时间的对象。
关于c++ - 为什么零初始化不是静态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24512191/