歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++中的static關鍵字

C++中的static關鍵字

日期:2017/3/1 10:09:58   编辑:Linux編程

C++的static有兩種用法:面向過程程序設計中的static和面向對象程序設計中的static。前者應用於普通變量和函數,不涉及類;後者主要說明static在類中的作用。

一、面向過程設計中的static

1、靜態全局變量

在全局變量前,加上關鍵字static,該變量就被定義成為一個靜態全局變量。我們先舉一個靜態全局變量的例子,如下:

  1. include<iostream>
  2. using namespace std;
  3. static int n; //定義靜態全局變量
  4. void fn()
  5. {
  6. n++;
  7. cout<<n<<endl;
  8. }
  9. int main(void)
  10. {
  11. n = 20;
  12. cout<<n<<endl;
  13. fn();
  14. return 0;
  15. }

靜態全局變量有以下特點:

  • 該變量在全局數據區分配內存;
  • 未經初始化的靜態全局變量會被程序自動初始化為0(自動變量的值是隨機的,除非它被顯式初始化);
  • 靜態全局變量在聲明它的整個文件都是可見的,而在文件之外是不可見的; 

靜態變量都在全局數據區分配內存,包括後面將要提到的靜態局部變量。對於一個完整的程序,在內存中的分布情況如下圖:
代碼區 全局數據區 堆區 棧區

一般程序的由new產生的動態數據存放在堆區,函數內部的自動變量存放在棧區。自動變量一般會隨著函數的退出而釋放空間,靜態數據(即使是函數內部的靜態局部變量)也存放在全局數據區。全局數據區的數據並不會因為函數的退出而釋放空間。細心的讀者可能會發現,Example 1中的代碼中將

static int n; //定義靜態全局變量

改為

int n; //定義全局變量

程序照樣正常運行。
Copyright © Linux教程網 All Rights Reserved