C++ 靜態持續變量 static

C++ 為靜態存儲持續性變量提供了3種鏈接性:外部鏈接性、內部鏈接性和無鏈接性。

這3種鏈接性在整個程序運行期間都存在,與自動變量相比,它們的壽命更長。由于靜態變量的數目在程序運行期間是不變的,因此程序不需要使用特殊的裝置(如堆棧)來管理他們。編譯器將分配固定的內存塊來存儲所有的靜態變量,這些變量在整個程序運行期間一直存在。

如果沒有顯式地初始化靜態變量,編譯器將把它設置為0。默認情況下,靜態數組和結構將每個元素或成員的所有位都設置為0。

三種靜態持續變量的創建:

  1. 要想創建鏈接性為外部的靜態持續變量,必須在代碼塊外面聲明它;
  2. 要想創建鏈接性為內部的靜態持續變量,必須在代碼塊外面聲明它,并且使用static限定符;
  3. 要想創建沒有鏈接性的靜態持續變量,必須在代碼塊內聲明它,并且使用static限定符。

三種靜態持續變量的例子:

……
int  NUM_ZDS_GLOBAL = 80;                  //#1
static  int NUM_ZDS_ONEFILE = 50;          //#2

int  main(){
…
}

void  fun1(int n){
         static int  nCount = 0;            //#3
         int  nNum = 0;                     //#4
}

void  fun2(int q){
         …
}

#1、#2、#3 在整個程序運行期間都存在。在 fun1 中聲明的 #3 的作用域為局部,沒有鏈接性,這意味著只能在 fun1 函數中使用它,就像自動變量 #4 一樣。但是,與 #4 不同的是,即使在 fun1 沒有被執行的時候,#3 也保留在內存中。

#1、#2 的作用域為整個文件,即在聲明的位置開始到文件末尾的范圍內都可以被使用。

具體地說,可以在 main、fun1、fun2 中使用它們。由于 #2 的鏈接性為內部,因此只能在包含上述代碼的文件中使用它;由于 #1 的鏈接性為外部,因此可以在程序的其他文件中使用它。

所有的靜態持續變量都具有下面兩個特征:

  1. 未被初始化的靜態變量的所有位都被設置為0;
  2. 只能使用常量表達式來初始化靜態變量。

常量表達式可以使用字面值常量、const 常量和 enum 常量以及 sizeof 操作符。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. 單獨編譯 和C語言一樣,C++也允許甚至鼓勵程序員將組件函數放在獨立的文件中。可以單獨編譯這些文件,然后將它...
    何幻閱讀 2,090評論 0 2
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,366評論 11 349
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,284評論 25 708
  • 文/以琳_ 耳熱心酸古韻長,悲音高亢滿滄桑。 其間況味千般品,世態輕塵一眼涼。
    以琳_閱讀 928評論 38 49
  • 今天第一天來到深圳,感覺有點陌生而又熟悉。熟悉是因為對于城市已經早就不陌生,陌生是我對于深圳這種的城市個性還不太了...
    Ui空空道人閱讀 170評論 0 0