標籤:靜態函數 tle 實現 inf code class 調用 void 語句
前言
今天看到static關鍵字,對其朦朦朧朧的,所以專門尋找了一下相關的定義和說明來深入理解
參考文章 : C/C++中STATIC用法總結
使用Static的作用主要有兩種:
- 第一個作用是限定範圍
- 第二個作用是保持變數內容持久化
c中static的用法:1. 全域靜態變數
用法: 在全域變數前加上關鍵字static,全域變數就定義成一個全域的靜態變數。
記憶體中的位置:靜態儲存區,整個程式運行過程中一直存在
範圍:全域靜態變數在聲明它的檔案之外是不可見的,也就是說作用在聲明所在的檔案中
2. 局部靜態變數
在局部變數之前加上關鍵字static,局部變數就成為一個局部靜態變數
記憶體中的位置:靜態儲存區
初始化:未經過初始化的全域靜態局部變數會自動初始化為0
範圍:範圍仍然為局部範圍,當定義它的函數或者語句塊結束的時候,範圍結束。當局部靜態變數離開範圍之後,並沒有銷毀,而是仍然駐留在記憶體當中,只不過我們不能對它進行訪問,之道函數再次調用的時候,值依然保持不變。
C++中static的用法類的靜態成員
class A{private: static int value;}
在Cpp中必須對靜態變數進行初始化,
初始化時,使用範圍運算子來標明其所屬的類,其屬於所有成員共有,只有一個拷貝。
類的靜態函數
class A{private: static int func(int x);}
實現的時候也不需要static的修飾,因為static是聲明性關鍵字;
類的靜態函數是該類的範疇內的全域函數,不能訪問類的私人成員,只能訪問類的靜態成員,不需要類的執行個體即可調用;
實際上,他就是增加了類的存取權限的全域函數;
void A::func(int);
靜態成員函數可以繼承和覆蓋,但無法是虛函數;
只在cpp內有效全域變數:
在cpp檔案的全域範圍內聲明:
static int val = 0;
這個變數的含義是該cpp內有效,但是其他的cpp檔案不能訪問這個變數;如果有兩個cpp檔案聲明了同名的全域靜態變數,那麼他們實際上是獨立的兩個變數;
只在cpp內有效全域函數:
函數的實現使用static修飾,那麼這個函數只可在本cpp內使用,不會同其他cpp中的同名函數引起衝突;
warning:不要再標頭檔中聲明static的全域函數,不要在cpp內聲明非static的全域函數,如果你要在多個cpp中複用該函數,就把它的聲明提到標頭檔裡去,否則cpp內部聲明需加上static修飾;
智能指標下的static
這裡使用GetMyType()的操作,通過Static的方式來擷取智能指標
測試發現,使用靜態變數後,Get的操作都是相同的內容,而且Type只建立了一次。
由於類中使用了靜態變數,所以類只有程式退出的時候才會完全析構。
來自為知筆記(Wiz)
C++ Static