c++ - 是否定义了静态初始化实现的顺序?

标签 c++ language-lawyer static-initialization

动态初始化可以是有序的也可以是无序的:

Dynamic initialization of a non-local variable with static storage duration is either ordered or unordered.

这并没有说明静态初始化的顺序。静态初始化的顺序是实现定义的吗?

最佳答案

静态初始化意味着“初始化具有静态存储持续时间的变量”。这是一个更为有限的术语,在 §3.6.2 [basic.start.init]/p2 中定义。

Together, zero-initialization and constant initialization are called static initialization; all other initialization is dynamic initialization. Static initialization shall be performed before any dynamic initialization takes place.

Constant initialization 定义在同一段落中,基本上涉及对编译时常量的初始化。

因为静态初始化涉及对编译时常量的初始化,并且保证在任何动态初始化发生之前发生,所以顺序并不重要。 (实际上,对于静态存储持续时间的对象,初始值很可能放在编译后的可执行文件的数据段(零初始化的bss段),并在程序启动时由操作系统直接加载,所以说“顺序“没有多大意义。)任何可能出现“静态初始化失败”的事情实际上都涉及动态初始化。

关于c++ - 是否定义了静态初始化实现的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24531186/

相关文章:

c++ - 我可以在构造函数参数中定义要在函数指针中使用的函数吗

c++ - 为什么不能向组合框添加字符串? VS C++

c++ - 如果在初始化静态局部变量之前发生异常会怎样?

c++ - 使用 C++ 模板包装第 3 方 C 代码

c - 是否有 C 的非二进制补码实现?

c - "void* p = &p;"在 C 中合法吗?

c++ - C++11 认为 "thread"是什么?

java - 从另一个线程初始化同一类的静态字段时访问静态方法

java - static() 方法(没有任何声明)

c++ - 使用指针数组中的对象调用重载的 friend ostream 插入运算符返回内存地址