類模板中的靜態變數

2021-10-03 14:44:42 字數 679 閱讀 1145

先上**,具體看輸出和注釋:

/*

編譯器並不是把函式模板處理成能夠處理任意類的函式

編譯器從函式模板通過具體型別產生不同的函式

編譯器會對函式模板進行兩次編譯

在宣告的地方對模板**本身進行編譯;在呼叫的地方對引數替換後的**進行編譯。

*/#include using namespace std;

template class aa

;template t aa::m_a = 0; //必須要進行初始化,否則要報錯

void main()

總結:

在c++中,類模板中的靜態變數,對於每乙個具體型別,都會有不同的靜態變數。比如對於int型,其有多個物件,這些物件共享同乙個靜態變數,對於char型,其有多個物件,這些物件也共享同乙個靜態變數,但是int型物件共享的靜態變數和char型共享的靜態變數是不一樣的。這是類模板的特殊性,因為int型對應的類和char型對應的類本身就不一樣了。

總之,在c++中,無論是對於函式模板還是類模板,c++編譯器都會進行兩次編譯,第一次編譯是編譯函式模板或則類模板本身的**,第二次編譯是編譯具體型別替換後的**,哪怕是對於同乙個模板,對於不同的型別,編譯的**都是不一樣的,比如上述**中的int和char, 只不過由於模板的存在,而不用程式設計師寫兩個類,c++編譯器幫助我們做了。

C 類中的靜態變數

c 類中的靜態變數 靜態資料成員 下面看乙個例子 include class point static void init void main void 這樣編譯是不會有任何錯誤的。下面這樣看 include class point static void init void main void 這...

python類靜態變數

python的類靜態變數直接定義在類中即可,不需要修飾符,如 class test stc attr 1def init self,attr1,attr2 self.attr1 attr1 self.attr2 attr2 在類test中,stc attr是屬於類test的靜態變數,attr1和at...

類靜態變數 問題

類的靜態成員變數 記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置...