1
我有以下文件:靜態變量的初始化:位置相關?
.h文件
class myclass
{
static int variable;
// constructor
myclass();
}
cpp文件
// initialize this variable
int myclass::variable = 0;
myclass::myclass()
{
// I use here the static variable
}
我的問題是:當靜態變量將被初始化?首先還是在構造函數之後?
如果我把
int myclass::variable = 0;
線類的構造函數定義之後?它會在類的對象實例化之前被初始化嗎?
小的修正:它不管所述_can_變量被定義,其中,所述編譯器可以重新排序初始化如果變量被移動。然而,我們不能依賴訂單,唯一的保證是靜態變量將在main() – Vlad 2012-07-21 10:08:13
之前被初始化,myclass :: variable'在構造函數調用'globalInstance'之前仍然是零初始化,因爲後者是動態的初始化。 – 2012-07-21 10:09:53
@Vlad:在命名空間範圍內,在翻譯單元中靜態存儲持續時間的對象必須按其聲明的順序進行初始化,以便編譯器_must_在重新排序聲明時重新排序初始化(除非在「as if」規則下,它可以確定訂單無關緊要)。 – 2012-07-21 10:14:07