如果我有一個從未使用過的全局內部連接項,它的初始值設定項是否保證運行?例如:未使用的全局靜態初始值設定項
static int x = SideEffectfulFunction();
或
namespace {
int x = SideEffectfulFunction();
}
是SideEffectfulFunction()
保證被調用,即使x
不會被引用?或者是合法的x
被刪除?
如果我有一個從未使用過的全局內部連接項,它的初始值設定項是否保證運行?例如:未使用的全局靜態初始值設定項
static int x = SideEffectfulFunction();
或
namespace {
int x = SideEffectfulFunction();
}
是SideEffectfulFunction()
保證被調用,即使x
不會被引用?或者是合法的x
被刪除?
是的,標準保證此
靜態存儲持續時間[basic.stc.static]
2如果具有靜態存儲持續時間的變量的初始化或副作用析構函數,它即使它似乎是未使用的,不同的是如在15.8指定一個類對象或它的拷貝/移動,可以消除不被消除。
它保證運行。如果要創建引用彼此在不同的源文件,也不能保證其秩序將被初始化,這是被稱爲static initialization order fiasco
在這種情況下,你可以創建創建靜態對象的函數的對象不止一個靜態對象,確保初始化的順序是功能對象,然後再次對象。
1納秒:) +1打我。 – StoryTeller
@StoryTeller一直在閱讀這樣的問題的標準,因爲與你交談:) – Curious
me2 :) +1 .......... – mattideluxe