C ++ 03标准 [basic.start.init]第3点陈述:
是否是动态的实现定义 命名空间对象的初始化(8.5,9.4,12.1,12.6.1) 范围在main的第一个语句之前完成。如果 初始化推迟到第一个之后的某个时间点 主要声明,应在首次使用之前发生 在与翻译单元相同的翻译单元中定义的功能或对象 要初始化的对象。
Microsoft编译器根据Additional Startup Considerations执行main()
之前的初始化。
我无法获取说明GNU和Sun Forte编译器行为的文档。
任何人都可以:
FWIW,我观察了GNU的g ++和SUN的CC的行为,并且都在main之前执行了初始化,但我不接受这个作为明确的答案。 (我可以发布我曾经观察的非常简单的代码,如果有人有兴趣,但我觉得这个问题足够长了)
答案 0 :(得分:5)
明确的答案是所有编译器都进行静态初始化
在main
之前,除非对象位于稍后加载的DLL中。
在实践中,(几乎)不可能满足要求
你引用的文字。 (想想如果有一个周期会发生什么。)