c/c++中static用法總結

static的做用主要有兩種:c++

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

c語言中static的用法:spa

一、全局靜態變量:對象

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

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

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

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

二、局部靜態變量:變量

  在局部變量以前加上關鍵字static,局部變量就成爲一個局部靜態變量。權限

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

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

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

三、靜態函數:

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

 

c++中static的用法:

  一、類的靜態成員:

  class A{

  private:

    static int val;

  };

  在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修飾;

相關文章
相關標籤/搜索