【发布时间】:2011-06-16 12:45:34
【问题描述】:
该标准明确指出,静态持续时间变量(命名空间范围和类静态成员)的动态初始化不必在 main 执行之前发生: “命名空间范围对象的动态初始化(8.5、9.4、12.1、12.6.1)是否在main的第一条语句之前完成是实现定义的。”是 3.6.2(3) 这不是[总是?] 实现动态初始化的方式吗?有什么更好/更简单的方法来保证对象在使用前被初始化?
【问题讨论】:
-
你在哪里读到的?我不确定这是真的。你可能会想到“静态初始化顺序惨败”(parashift.com/c++-faq-lite/ctors.html#faq-10.14),但这与
main()无关。 -
查看我的编辑:IS 3.6.2(3)
-
我不知道 C++ 标准是怎么说的,但至少在 C 中,静态初始化的“方式和时间”是未指定的行为。唯一的要求是在程序启动之前设置它们。在托管环境中,这意味着必须在调用 main() 之前初始化它们。
-
C 没有静态持续时间变量和常量的动态初始化阶段。初始化程序必须是编译时常量。
标签: c++