標籤:static關鍵字 資料區 上下文 產生 程式 上下文環境 資料 自動 拷貝
在不同的語言環境、或者同一語言不同上下文環境中,static關鍵字具有不同的意思。
1、C語言中
1.1 聲明為static的變數具有以下三部分特性:
1)儲存位置:儲存於靜態記憶體中
2)建立與範圍:靜態變數在程式運行之前建立,在程式的整個執行期間始終存在。
3)初始化取值
1.2 類型
1.2.1 靜態全域變數:
1)記憶體中的位置:靜態儲存區(靜態儲存區在整個程式運行期間都存在)
2)初始化:未經初始化的全域靜態變數會被程式自動初始化為0(自動對象的值是任意的,除非他被顯示初始化)
3)範圍:全域靜態變數在聲明他的檔案之外是不可見的。準確地講從定義之處開始到檔案結尾。
好處:
定義全域靜態變數的好處:
<1>不會被其他檔案所訪問,修改
<2>其他檔案中可以使用相同名字的變數,不會發生衝突。
1.2.2靜態局部變數:
1)記憶體中的位置:靜態儲存區
2)初始化:未經初始化的全域靜態變數會被程式自動初始化為0(自動對象的值是任意的,除非他被顯示初始化)
3)範圍:範圍仍為局部範圍,當定義它的函數或者語句塊結束的時候,範圍隨之結束。
1.2.3 靜態函數
函數的定義和聲明預設情況下是extern的,但靜態函數只是在聲明他的檔案當中可見,不能被其他檔案所用。
定義靜態函數的好處:
1)其他檔案中可以定義相同名字的函數,不會發生衝突
2) 靜態函數不能被其他檔案所用。
2、C++中
2.1待用資料成員
在類內資料成員的聲明前加上關鍵字static,該資料成員就是類內的待用資料成員.
1)儲存位置:待用資料成員儲存在全域資料區
2)初始化:
3)待用資料成員被當作是類的成員。無論這個類的對象被定義了多少個,待用資料成員在程式中也只有一份拷貝,由該類型的所有對象共用訪問。
4)訪問方式:<類對象名>.<待用資料成員名> 或 <類類型名>::<待用資料成員名>
5)在沒有產生類的執行個體時,也可以訪問待用資料成員
因為待用資料成員在全域資料區分配記憶體,屬於本類的所有對象共用,所以,它不屬於特定的類對象,在沒有產生類對象時其範圍就可見,即在沒有產生類的執行個體時,我們就可以操作它;
2.2靜態成員函數
特點:
1)非靜態成員函數可以任意地訪問靜態成員函數和待用資料成員;
2) 靜態成員函數不能訪問非靜態成員函數和非待用資料成員;
3)由於沒有this指標的額外開銷,因此靜態成員函數與類的全域函數相比速度上會有少許的增長;
4)調用靜態成員函數,可以用成員訪問操作符(.)和(->)為一個類的對象或指向類對象的指標調用靜態成員函數,也可以直接使用如下格式:
<類名>::<靜態成員函數名>(<參數表>)
關於C/C++中,對static關鍵字的理解