2012-12-10 54 views

回答

12

其他值將被初始化;從C11標準,§6.7.9初始化,¶19和¶21:

在初始化列表順序應發生的初始化,設置用於特定的子對象重寫爲同一子對象任何前面列出的初始化每個初始化;所有未明確初始化的子對象都應該被隱式地初始化爲具有靜態存儲持續時間的對象。

151)子對象的任何初始值設定項被覆蓋,因此未用於初始化該子對象,可能根本沒有進行評估。


如果在一個大括號內的列表更少初始化以外還有用於初始化已知大小的陣列元件或聚集體的成員,或更少的字符在字符串文本比有在元件數組,聚合的其餘部分應該隱式地初始化爲具有靜態存儲持續時間的對象。

和未初始化int靜態存儲持續時間被含蓄初始化爲零;相同部分,¶10:

如果具有自動存儲持續時間的對象未被顯式初始化,則其值是不確定的。如果具有靜態或線程存儲持續時間的對象沒有明確地進行初始化,則:

  • 如果它有指針類型,它被初始化爲空指針;
  • 如果它有指針類型,則它被初始化爲一個空指針;
  • 如果它有算術類型,它被初始化爲(正或無符號)零;
  • 如果它是一個聚合,每個成員根據這些規則初始化(遞歸),並且任何填充都初始化爲零位;
  • 如果它是一個聯合,根據這些 規則初始化第一個命名成員(遞歸),並且任何填充都初始化爲零位;

行爲在C89和C99中是相同的。

+0

有沒有從標準的任何保證? – MOHAMED

+2

該聲明並非如此。 – 2012-12-10 17:30:09

+0

@ H2CO3 - 在哪些情況下? – djechlin