首先static變數只有一次初始化,不管在類中還是在函數中..有這樣一個函數:
void Foo()<br />{<br />static int a=3; // initialize<br />std::cout << a;<br />a++;<br />}
這裡的static int a=3隻執行了一次。在main中調用Foo()兩次,結果為34.將上面的函數改為
void Foo()<br />{<br />static int a;<br /> a=3; // not initialize<br />std::cout << a;<br />a++;<br />}
同樣在Foo()中調用兩次.結果為33
在類中使用非const的static類成員變數。初始化時要使用typename classname::variablename = value的形式
例如:
class myClass<br />{<br />public:<br />static int a;<br />myClass()<br />{<br />}<br />};<br />int myClass::a = 3; // here initialize<br />int main()<br />{<br /> cout << myClass::a;<br /> return 0;<br />}
如果使用的是const類型的static變數,那麼就要在類中初始化:
class myClass<br />{<br />public:<br />const static int a=3; // here initialize<br />myClass()<br />{<br />}<br />};
如果是模板中使用非const的static的變數..那需要根據具體類型初始化。
例如 int myClass<int>::a = 4;那麼如果你調用的是cout << myClass<double>::a,那一定會編譯出錯的。
因為模板是不是具體類型,myClass<int>, myClass<double>才是一個具體類型,而一個類靜態成員在特定類中被初始化一次。這樣就好理解了。