static關鍵字的作用

2021-10-21 07:34:19 字數 1983 閱讀 4772

c++ 變數根據定義的位置的不同的生命週期,具有不同的作用域,作用域可分為 6 種:

全域性作用域,區域性作用域,語句作用域,類作用域,命名空間作用域和檔案作用域。

定義:在全域性變數前加上關鍵字static;

記憶體中的位置:靜態儲存區;

初始化:未經初始化的全域性靜態變數會被自動初始化為0(自動物件的值是任意的,除非他被顯式初始化);

作用域:全域性靜態變數在宣告他的檔案之外是不可見的,準確地說是從定義之處開始,到檔案結尾。

定義:在區域性變數前加上關鍵字static;

記憶體中的位置:靜態儲存區;

初始化:未經初始化的區域性靜態變數會被自動初始化為0(自動物件的值是任意的,除非他被顯式初始化);

作用域:作用域仍為區域性作用域,當定義它的函式或者語句塊結束的時候,作用域結束。但是當區域性靜態變數離開作用域後,並沒有銷毀,而是仍然駐留在記憶體當中,只不過我們不能再對它進行訪問,直到該函式再次被呼叫,並且值不變。這種變數在程式執行之前就建立,在程式執行的整個週期都存在。

定義:在函式返回型別前加static;

作用域:函式的定義和宣告在預設情況下都是extern的,但靜態函式只是在宣告他的檔案當中可見,不能被其他檔案所用。函式的實現使用static修飾,那麼這個函式只可在本cpp內使用,不會同其他cpp中的同名函式引起衝突;

注意:不要在標頭檔案中宣告static的全域性函式(變數),原因是:包含了該標頭檔案的所有原始檔中都定義了這些函式(變數),即該標頭檔案被包含了多少次,這些函式(變數)就定義了多少次。

不要在cpp內宣告非static的全域性函式,如果你要在多個cpp中復用該函式,就把它的宣告提到標頭檔案裡去,否則cpp內部宣告需加上static修飾。

在類中,靜態成員可以實現多個物件之間的資料共享,並且使用靜態資料成員還不會破壞隱藏的原則,即保證了安全性。因此,靜態成員是類的所有物件中共享的成員,而不是某個物件的成員。

lass a

;

class

a;

在靜態成員函式的實現中不能直接引用類中說明的非靜態成員,因為靜態成員函式沒有 this 指標,可以引用類中說明的靜態成員。如果靜態成員函式中要引用非靜態成員時,可通過物件來引用。從中可看出,呼叫靜態成員函式使用如下格式:《類名》::《靜態成員函式名》(《參數列》);

靜態成員函式和靜態資料成員一樣,它們都屬於類的靜態成員,它們都不是物件成員。因此,對靜態成員的引用不需要用物件名。靜態成員函式不能宣告成虛函式(virtual)、const 函式和volatile函式(volatile的作用就是用來進行多執行緒程式設計。在單執行緒中那就是只能起到限制編譯器優化的作用)。注:

注:

從分配記憶體空間看:

靜態儲存區:全域性變數,靜態區域性變數,靜態全域性變數。

棧:區域性變數。

靜態變數和棧變數(儲存在棧中的變數)、堆變數(儲存在堆中的變數)的區別:靜態變數會被放在程式的靜態資料儲存區(.data 段)中(靜態變數會自動初始化),這樣可以在下一次呼叫的時候還可以保持原來的賦值。而棧變數或堆變數不能保證在下一次呼叫的時候依然保持原來的值。

靜態變數和全域性變數的區別:靜態變數用 static 告知編譯器,自己僅僅在變數的作用範圍內可見。全域性變數只需在乙個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包含全域性變數定義的原始檔需要用 extern 關鍵字再次宣告這個全域性變數。

補充:

使用 volatile 關鍵字的場景:

volatile 關鍵字和 const 關鍵字可以同時使用,某種型別可以既是 volatile 又是 const ,同時具有二者的屬性。

static關鍵字的作用

static關鍵字是c,c 中都存在的關鍵字,它主要有三種使用方式,其中前兩種在c c 語言中使用,第三種只在c 中使用 c,c 中具體細微操作不盡相同,本文以c 為準 1 區域性靜態變數 2 外部靜態變數 函式 3 靜態資料成員 成員函式 下面就這三種使用方式及注意事項分別說明 一 區域性靜態變數...

關鍵字static的作用

關鍵字static的作用是什麼?這個簡單的問題很少有人能回答完全。在c語言中,關鍵字static有三個明顯的作用 1在函式體,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。2 在模組內 但在函式體外 乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是乙個本地...

關鍵字Static的作用

1 修飾變數 區域性靜態變數和全域性靜態變數,都存在記憶體的靜態區 區域性靜態變數,在函式體內定義,只能在函式內部使用,同乙個檔案中的其他函式不能用。即使函式執行結束,這個靜態變數的值也不會被銷毀,函式下次使用時仍能用到這個值。全域性靜態變數,在函式外部定義,作用域 從定義處開始,到所在檔案結尾處結...