static :靜態的
通常宣告的不用static修飾的變數,都是auto的,因為它是預設的,就象short和long總是預設為int一樣;
auto的含義是由程式自動控制變數的生存週期,通常指的就是變數在進入其作用域的時候被分配,離開其作用域的時候被釋放;
而static就是不auto,變數在程式初始化時被分配,直到程式退出前才被釋放;也就是static是按照程式的生命週期來分配釋放變數的,而不是變數自己的生命週期;
無論是static還是非static的全域性變數,如果不加限制隨意訪問的話易出現同步問題。
無論是static還是非static的區域性變數,每個執行緒都是私有的,其他執行緒不會對其進行干擾。
1、類的靜態成員:
class a
private:
static int s_value;
在cpp中必須對它進行初始化:
類的靜態成員是該類所有例項的共用成員,也就是在該類的範疇內是個全域性變數
2.類的靜態函式:
class a
private:
static void func(int value);
實現的時候也不需要static的修飾,因為static是宣告性關鍵字;類的靜態函式是在該類的範疇內的全域性函式,不能訪問類的私有成員,只能訪問類的靜態成員,不需要類的例項即可呼叫;實際上,它就是增加了類的訪問許可權的全域性函式:
void
a::fun(int);
靜態成員函式可以繼承和覆蓋,但無法是虛函式;
3.只在cpp內有效的全域性變數:
在cpp檔案的全域性範圍內宣告:
static int g_value = 0;
這個變數的含義是在該cpp內有效,但是其他的cpp檔案不能訪問這個變數;如果有兩個cpp檔案宣告了同名的全域性靜態變數,那麼他們實際上是獨立的兩個變數;
如果不使用static宣告全域性變數,那麼將無法保證這個變數不被別的cpp共享,也無法保證一定能被別的cpp共享,因為要讓多個cpp共享乙個全域性變數,應將它宣告為extern(外部)的;
4.只在cpp內有效的全域性函式:
在cpp內宣告:
static void func();
函式的實現不需要static修飾,那麼這個函式只可在本cpp內使用,不會同其他cpp中的同名函式引起衝突;道理和如果不使用static會引起的問題和第3點一樣;
不要在標頭檔案中宣告static的全域性函式,不要在cpp內宣告非static的全域性函式,如果你要在多個cpp中復用該函式,就把它的宣告提到標頭檔案裡去,否則在cpp內部宣告需要加上static修飾;在c語言中這點由為重要!
static用法小結
static關鍵字是c,c 中都存在的關鍵字,它主要有三種使用方式,其中前兩種只指在c語言中使用,第三種在c 中使用 c,c 中具體細微操作不盡相同,本文以c 為準 1 區域性靜態變數 2 外部靜態變數 函式 3 靜態資料成員 成員函式 下面就這三種使用方式及注意事項分別說明 一 區域性靜態變數 在...
static用法總結
static static關鍵字是c,c 中都存在的關鍵字,它主要有三種使用方式,其中前兩種只指在c語言中使用,第三種在c 中使用 c,c 中具體細微操作不盡相同,本文以c 為準 1 區域性靜態變數 2 外部靜態變數 函式 3 靜態資料成員 成員函式 下面就這三種使用方式及注意事項分別說明 一 區域...
static用法小結
static關鍵字是c,c 中都存在的關鍵字,它主要有三種使用方式,其中前兩種只指在c語言中使用,第三種在c 中使用 c,c 中具體細微操作不盡相同,本文以c 為準 1 區域性靜態變數 2 外部靜態變數 函式 3 靜態資料成員 成員函式 下面就這三種使用方式及注意事項分別說明 一 區域性靜態變數 在...