回答

8

3.6.2/1指出,“具有静态存储持续时间的对象(3.7.1)在进行任何其他初始化之前应被初始化(8.5)“。

所以你是对的,他们没有默认初始化。但它们是零初始化的,其实对于int来说是一样的。对于一个类的类型,它不一定是同一个东西。

这就是说,我不承诺这里的行为只是初始化的顺序是未指定的,因此一个变量最终为10,另一个变量为20,但未指定哪个是哪个。它可能没有定义在其他一些理由,但我想不出。

3

每一个全局变量是一个零初始化,所有其他初始化发生之前。
此行为3.6.2 [basic.start.init]/2下描述:

变量具有静态存储持续时间或线程存储时限应为零初始化任何其他初始化发生之前。

(这是从C++ 0X FDIS,但相信C++ 98标准说是相同的。)

相关问题