C++03标准[basic.start.init]第3点 states:
是否动态是实现定义的
命名空间对象的初始化(8.5、9.4、12.1、12.6.1)
作用域是在 main 的第一个语句之前完成的。如果
初始化被推迟到第一次之后的某个时间点
main 语句,它应在第一次使用任何
在同一翻译单元中定义的函数或对象
要初始化的对象。
微软编译器,根据其他启动注意事项 http://msdn.microsoft.com/en-US/library/0e519f64%28v=vs.80%29,执行之前的初始化main()
.
我一直无法获得说明 GNU 和 Sun Forte 编译器行为的文档。
任何人都可以:
- 给我指出描述 GNU 和 Forte 编译器在动态初始化方面的行为的文档方向(我检查了 GCC 手册,没有发现任何与动态初始化相关的内容)。
- 对延迟动态初始化的线程安全性进行评论(如果两个线程尝试从包含非本地对象的同一翻译单元调用函数)。
FWIW,我观察了 GNU 的 g++ 和 SUN 的 CC 的行为,并且都在 main 之前执行了初始化,尽管我不接受这是一个明确的答案。 (我可以发布我用来观察是否有人感兴趣的非常简单的代码,但我觉得问题足够长)
明确的答案是所有编译器都会进行静态初始化
前main
, unless这些对象位于稍后加载的 DLL 中。
实际上,要满足上述要求是(几乎)不可能的。
您以其他方式引用的文字。 (想想如果存在循环会发生什么。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)