當涉及變數分配和初始化時,時間可能會根據變數的範圍而有所不同。如前所述,全域變數是在程式啟動時分配的。但是函數內宣告的靜態變數呢?
在給定的場景中,靜態變數 globalish 在程式啟動時分配,類似於全域變數。這是因為靜態變數的生命週期比局部變數長,即使它們定義的函數退出,靜態變數的值也能保持不變。
靜態變數的初始化時機是事情變得有趣的地方。與全域變數不同,靜態變數不會在程式啟動時初始化。相反,它們僅在首次呼叫它們所屬的函數時才進行初始化。這種行為在提供的範例程式中很明顯:
void doSomething() { static bool globalish = true; // Initialization occurs here // ... }
在這種情況下,globalish 的初始化發生在 doSomething() 第一次執行時,而不是在程式啟動時。這種延遲初始化被稱為「延遲初始化」。
這種延遲初始化的原因是為了避免對可能永遠不會使用的靜態變數進行不必要的初始化。如果程式從不呼叫宣告靜態變數的函數,則可以透過不初始化它來節省記憶體和計算時間。
以上是靜態變數什麼時候初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!