动态初始化

时间:2012-09-07 15:45:56

标签: c++

C ++ 03标准 [basic.start.init]第3点陈述:

  

是否是动态的实现定义   命名空间对象的初始化(8.5,9.4,12.1,12.6.1)   范围在main的第一个语句之前完成。如果   初始化推迟到第一个之后的某个时间点   主要声明,应在首次使用之前发生   在与翻译单元相同的翻译单元中定义的功能或对象   要初始化的对象。

Microsoft编译器根据Additional Startup Considerations执行main()之前的初始化。

我无法获取说明GNU和Sun Forte编译器行为的文档。

任何人都可以:

  1. 请指出描述GNU和Forte编译器在动态初始化方面的行为的文档方向(我已经检查了GCC手册,没有发现任何与动态初始化有关的内容)。
  2. 评论延迟动态初始化的线程安全性(如果两个线程试图从包含非本地对象的同一转换单元调用函数)。

  3. FWIW,我观察了GNU的g ++和SUN的CC的行为,并且都在main之前执行了初始化,但我不接受这个作为明确的答案。 (我可以发布我曾经观察的非常简单的代码,如果有人有兴趣,但我觉得这个问题足够长了

1 个答案:

答案 0 :(得分:5)

明确的答案是所有编译器都进行静态初始化 在main之前,除非对象位于稍后加载的DLL中。 在实践中,(几乎)不可能满足要求 你引用的文字。 (想想如果有一个周期会发生什么。)