標籤:
本文主要記錄的C++中static的一些內容,內容簡單,僅僅作為梳理一下知識,如有錯誤請留言指出。
static的作用
- 在函數體,一個被聲明為static的變數,在這一函數被調用的過程裡,其數值維持不變。
- 在模組內(但在函數體外),一個被聲明的靜態變數可以被模組內的所有函數訪問,但是不能被模組外的函數訪問,是一個本地的全域變數
- 在模組內,一個被聲明為靜態函數只可能被這一模組內的其他函數調用,也就是這個函數被限制在聲明它的模組內使用。
總的來說,static控制了變數和函數的使用範圍(本機資料化和代碼範圍的控制)
static全域變數和普通全域變數的區別
全域變數和靜態全域變數都是靜態儲存方式。區別在於:非靜態全域變數的範圍是整個來源程式,當一個來源程式有多個源檔案組成時,非靜態全域變數在各個源檔案都有效,而靜態全域變數則限制了範圍,只定義了該靜態全域變數的源檔案有效,同一來源程式的其他源檔案不能使用它,使用靜態全域變數可以避免在其他源檔案中引起錯誤。
綜上:把局部變數改成靜態變數改變了它的儲存方式,及改變了它的生存期,把全域變數改為靜態變數,改變了它的範圍,限制了它的使用範圍。
- static全域變數與普通全域變數的區別:static全域變數只初始化一次,防止在其他檔案單元中被引用
- static局部變數與普通變數的區別:static全域變數只初始化一次,下一次依據上一次結果值。
- static函數與普通函數的區別:static函數在記憶體中只有一份,普通函數在每個被調用中維持一份複製品
C++類的待用資料和方法成員
類中的靜態成員和方法不屬於類的執行個體,而屬於類本身並在所有類的執行個體間共用。調用這些時,應用類名::來引用。
#include <iostream>using namespace std;class Widget{public: Widget() { ++count; } ~Widget() { --count; } static int num()//靜態成員函數 { return count; }private: static int count;//靜態私人資料成員};int Widget::count = 0;//int main(){ Widget x,y; cout<<"The num is:"<<Widget::num()<<endl; if(Widget::num()>1) { Widget x,y,z; cout<<"The num is:"<<Widget::num()<<endl; } Widget z; cout<<"The num is:"<<Widget::num()<<endl; cout << "Hello World!" << endl; return 0;}
C++ static