C++ 03标准[basic.start.init]第3点指出:
它是实现定义的,无论命名空间作用域的对象的动态初始化(8.5,9.4,12.1,12.6.1)是否在main的第一个语句之前完成.如果初始化延迟到main的第一个语句之后的某个时间点,则它应该在第一次使用与要初始化的对象相同的转换单元中定义的任何函数或对象之前发生.
根据Additional Startup Considerations,Microsoft Compilers在执行之前执行初始化main().
我无法获得说明GNU和Sun Forte编译器行为的文档.
谁能:
FWIW,我观察了GNU的g ++和SUN的CC的行为,并且都在main之前进行了初始化,尽管我不接受这个作为确定的答案.(我可以发布我以前用来观察的非常简单的代码,如果有人有兴趣,但我觉得这个问题足够长了)