首先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,對,因為這個函式是按值傳遞,傳遞的是複製以後的引數,複製,沒有初始化當然就不行了。在論壇上看到一位仁兄的帖子,編譯通...