1

從編程語言語用,由Scott一定要初始化靜態對象嗎?

對象的壽命通常對應於三個主要 存儲分配機制之一,用於管理對象的空間:

  1. 靜態對象給出的絕對地址這在整個程序的執行過程中保留下來。

  2. 棧對象分配和釋放在最後的,第一個出的順序,通常與子程序調用和返回結合。

  3. 堆對象可以分配,並在任意時間釋放。他們需要更通用(並且昂貴)的存儲管理算法 算法。

例如,在C,靜態對象必須用常量表達式(表達式可在編譯時被評估)初始化。

我不知道它是否在其他語言的情況下,甚至什麼其他語言也有靜態的對象。

一般來說,必須初始化靜態對象嗎?初始化時,它們是否必須使用可在編譯時評估的表達式進行初始化?

通過初始化,我的意思是顯式或隱式的(即自動語言實現完成),而不是uninitailziation。 所以要重新說明我的問題:通常,程序或編譯器可以將靜態對象保持爲未初始化狀態?

謝謝。

+0

簡短答案是'不'。但是他們可能應該在程序的後面避免未初始化的問題。 – Serge

+0

不完全正確,一個'static'變量默認被初始化爲0(或者等價),'non static'變量應該被初始化,否則會在你的內存棧中產生一些垃圾值。 –

回答

3

一個static變量將被初始化爲「零」自動,除非你明確地初始化。

除此之外,生命時間或連接部分,它絕不遜於其它任何變量,這意味着您可以在初始化任何其他變量相同的方式將其初始化不同。

+0

謝謝。 通過初始化,我的意思是顯式或隱式,而不是單純化。 那麼你是說靜態對象必須被初始化? – Tim

+0

@Tim不,它們會在調用'main'之前由「編譯器」自動初始化,除非你明確地做了。 –

+0

讓我重新說明我的問題:通常,程序或編譯器可以將靜態對象保持爲未初始化狀態嗎? – Tim