2017-06-26 35 views
3

如果我有一個從未使用過的全局內部連接項,它的初始值設定項是否保證運行?例如:未使用的全局靜態初始值設定項

static int x = SideEffectfulFunction(); 

namespace { 
    int x = SideEffectfulFunction(); 
} 

SideEffectfulFunction()保證被調用,即使x不會被引用?或者是合法的x被刪除?

回答

9

是的,標準保證此

靜態存儲持續時間[basic.stc.static]

2如果具有靜態存儲持續時間的變量的初始化或副作用析構函數,它即使它似乎是未使用的,不同的是如在15.8指定一個類對象或它的拷貝/移動,可以消除不被消除。

+1

1納秒:) +1打我。 – StoryTeller

+0

@StoryTeller一直在閱讀這樣的問題的標準,因爲與你交談:) – Curious

+1

me2 :) +1 .......... – mattideluxe

0

它保證運行。如果要創建引用彼此在不同的源文件,也不能保證其秩序將被初始化,這是被稱爲static initialization order fiasco在這種情況下,你可以創建創建靜態對象的函數的對象不止一個靜態對象,確保初始化的順序是功能對象,然後再次對象。

來源: https://isocpp.org/wiki/faq/ctors#static-init-order

相關問題