2014-12-02 35 views
0

static成員變量在哪個狀態下保存值0靜態成員變量在哪個狀態下保存值「0」?

當我們宣佈它?

static int x; 

或者當我們定義它時?

int Simple::x; 
+0

將其分配給0不是必需的。我已經測試過它,它輸出0,但我想知道它是否包含0之前。但正如你所說,它包含隨機。謝謝。 :) – Vipulcoolrule 2014-12-02 16:01:24

+0

你需要影響它。 'int simple :: x = 0;' – user2346536 2014-12-02 16:01:29

+0

它不應該包含0。我很驚訝我實際上編譯沒有任何作用。 – user2346536 2014-12-02 16:02:09

回答

2

兩者都不合理,因爲聲明和定義與程序的運行時狀態無關。

在程序啓動之前,在任何用戶代碼運行之前,它在靜態初始化階段被初始化爲零。

1

編譯器在聲明時將其初始化爲0,除非您爲其指定任何其他值。

+0

visual studio 2013有什麼這樣做?將我們指向標準而不是微軟編譯器的規範。 – zoska 2014-12-02 16:15:52

+0

起始段落以簡短的方式總結了靜態關鍵字。雖然我同意你的反對意見,但這也是它的必要條件,因此我會將網址從答案中刪除。 – NSNoob 2014-12-02 16:30:40

1

該對象由定義創建,而不是聲明。所以說它是初始化你的對象的定義就不那麼錯了。但是,你不知道這將發生的確切時間。你只是知道這會在main調用之前發生。這就是爲什麼我說更少錯誤而不是更正確。

是的,內置類型的靜態數據成員默認爲零初始化。

1

如果沒有其他初始化,則在創建第一個對象時將所有靜態數據初始化爲零。