C++ Static

來源:互聯網
上載者:User

標籤:靜態函數   tle   實現   inf   code   class   調用   void   語句   

前言

今天看到static關鍵字,對其朦朦朧朧的,所以專門尋找了一下相關的定義和說明來深入理解
參考文章 : C/C++中STATIC用法總結

使用Static的作用主要有兩種:

  1. 第一個作用是限定範圍
  2. 第二個作用是保持變數內容持久化
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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.