C static變數初始化問題

2021-05-09 03:41:48 字數 1053 閱讀 9375

首先static變數只有一次初始化,不管在類中還是在函式中..有這樣乙個函式:

view plain

copy to clipboard

print?

void  foo()  

這裡的static int a=3只執行了一次。在main中呼叫foo()兩次,結果為34.將上面的函式改為

view plain

copy to clipboard

print?

void  foo()  

同樣在foo()中呼叫兩次.結果為33

在類中使用非const的static類成員變數。初始化時要使用typename classname::variablename = value的形式

例如:view plain

copy to clipboard

print?

class  myclass  

};  

int  myclass::a = 3;  // here initialize

int  main()  

如果使用的是const型別的static變數,那麼就要在類中初始化:

view plain

copy to clipboard

print?

class  myclass  

};  

如果是模板中使用非const的static的變數..那需要根據具體型別初始化。

例如 int myclass::a = 4;那麼如果你呼叫的是cout << myclass::a,那一定會編譯出錯的。

因為模板是不是具體型別,myclass, myclass才是乙個具體型別,而乙個類靜態成員在特定類中被初始化一次。這樣就好理解了。

另外static 變數不能在建構函式中初始化,否則每個物件都要初始化一次,如下面的例子

#include

using namespace std;

class a

void foo()

static int i;

};int main(void)

c static變數的初始化

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

C static資料成員的初始化

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

變數的初始化問題

變數的初始化問題 變數初始化,反覆強調的乙個問題,很容易忽略,很容易出錯,下邊看乙個例子 在fun函式裡邊什麼也沒有做,可能基礎稍微牢固一些的朋友能夠看出來,引用了未初始化的變數 m,對,因為這個函式是按值傳遞,傳遞的是複製以後的引數,複製,沒有初始化當然就不行了。在論壇上看到一位仁兄的帖子,編譯通...