回答

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標準說是相同的。)

相關問題