Static 用法介紹

2022-09-11 12:24:11 字數 1365 閱讀 7299

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 靜態資料成員 成員函式 下面就這三種使用方式及注意事項分別說明 一 區域性靜態變數 在...