關於C/C++中,對static關鍵字的理解

來源:互聯網
上載者:User

標籤: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關鍵字的理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.