c/c++中static用法總結


static的作用主要有兩種:

第一個作用是限定作用域;第二個作用是保持變量內容持久化;

c語言中static的用法:

1、全局靜態變量:

  用法:在全局變量前加上關鍵字static,全局變量就定義成一個全局靜態變量。 static int temp;

  內存中的位置:靜態存儲區,在整個程序運行期間一直存在。

  初始化:未經初始化的全局靜態變量會被自動初始化為0(自動對象的值是任意的,除非他被顯式初始化);

  作用域:全局靜態變量在聲明他的文件之外是不可見的,准確地說是從定義之處開始,到文件結尾。

2、局部靜態變量:

  在局部變量之前加上關鍵字static,局部變量就成為一個局部靜態變量。

  內存中的位置:靜態存儲區

  初始化:未經初始化的全局靜態變量會被自動初始化為0(自動對象的值是任意的,除非他被顯式初始化);

  作用域:作用域仍為局部作用域,當定義它的函數或者語句塊結束的時候,作用域結束。但是當局部靜態變量離開作用域后,並沒有銷毀,而是仍然駐留在內存當中,只不過我們不能再對它進行訪問,直到該函數再次被調用,並且值不變;

3、靜態函數:

  在函數返回類型前加關鍵字static,函數就定義成靜態函數。函數的定義和生命在默認情況下都是extern的,但靜態函數只是在聲明他的文件當中可見,不能被其他文件所用;

 

c++中static的用法:

  1、類的靜態成員:

  class A{

  private:

    static int val;

  };

  在cpp中必須對他進行初始化,初始化時使用作用域運算符來標明他所屬類,其屬於該類的所有成員共有,只有一個拷貝;

  2、類的靜態成員函數:

  class A{

  private:

    static int func(int x);

  };

   實現的時候也不需要static的修飾,因為static是聲明性關鍵字;類的靜態函數是該類的范疇內的全局函數,不能訪問類的私有成員,只能訪問類的靜態成員,不需要類的實例即可調用;實際上,他就是增加了類的訪問權限的全局函數

  void  A::func(int);

  靜態成員函數可以繼承和覆蓋,但無法是虛函數;

  3、只在cpp內有效的全局變量:

  在cpp文件的全局范圍內聲明:

  static int val = 0;

  這個變量的含義是該cpp內有效,但是其他的cpp文件不能訪問這個變量;如果有兩個cpp文件聲明了同名的全局靜態變量,那么他們實際上是獨立的兩個變量;

  4、只在cpp內有效的全局函數:

  函數的實現使用static修飾,那么這個函數只可在本cpp內使用,不會同其他cpp中的同名函數引起沖突;

  warning:不要再頭文件中聲明static的全局函數,不要在cpp內聲明非static的全局函數,如果你要在多個cpp中復用該函數,就把它的聲明提到頭文件里去,否則cpp內部聲明需加上static修飾;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM