c static變數的初始化

2021-07-24 10:20:35 字數 1340 閱讀 6119

用static宣告的變數或函式,都是屬於類的,而不屬於類物件,所以最好不要在類的建構函式中為static變數初始化(不需要初始化的就不用顧忌了,因為c#缺省會給static變數初化得,比如staitc整型變數,會初始化為0)。如果在類的建構函式中初始化static變數,那只有在你new過該類的物件後,static變數的初始化才起作用。

一、 例如:以下**,定義了乙個static_test的類,該類中有個static型別的list變數,並在建構函式中為其初始化

class static_test

}/// /// 列印m_lst

///

public static void printlist()

for (int i = 0; i < m_lst.count; ++i)

console.writeline();

}}

1. 此時,在沒有定義過static_test型別的物件時,直接呼叫static_test.printlist(),情況如下:

static void main(string args)

輸出: 

list is null

2. 若定義過static_test型別的物件,再呼叫static_test.printlist(),m_lst就有值了。

static void main(string args)

輸出:0 1 2 3 4 5 6 7 8 9

二、我個人觀點,將需要初始化的靜態變數,在類中宣告時,就給初始化了,以避免不必要的錯誤。如下,加了個initlist()靜態成員函式,static成員變數在宣告時通過該函式初始化

class static_test

private static listinitlist()

return lst;

}/// /// 列印m_lst

///

public static void printlist()

for (int i = 0; i < m_lst.count; ++i)

console.writeline();

}}

此時,在沒有定義過static_test型別的物件時,直接呼叫static_test.printlist(),情況如下:

static void main(string args)

輸出:

0 1 2 3 4 5 6 7 8 9

C static變數初始化問題

首先static變數只有一次初始化,不管在類中還是在函式中.有這樣乙個函式 view plain copy to clipboard print?void foo 這裡的static int a 3只執行了一次。在main中呼叫foo 兩次,結果為34.將上面的函式改為 view plain cop...

C static資料成員的初始化

c static static 資料成員的初始化可以分為兩種情況 第一種比較簡單,是staticconst int 型別的,它的初始化可以之間的類定義體內直接進行,比如 staticconst int period 30 第二種是其他型別的,初始化不能放在類定義體內部,要在外部定義,而且不能通過建構...

變數初始化

int a 是變數定義,也就是說編譯器將為a分配儲存,這在編譯時被處理。int a 0 是定義 初始化,定義的分配儲存的action在編譯時完成,初始化的action則在執行時完成 將執行類似dword ptr ebp 4 0的指令,而單獨的int a 不會有對應的執行指令 定義是分配空間,而初始化...