靜態變數和全域性變數

2021-07-27 08:44:15 字數 1008 閱讀 5397

靜態資料成員和靜態函式:與類本身直接相關,而不是與類的各個物件保持關聯。通過在成員的宣告之前加上關鍵字static使得其與類關聯在一起。 靜態資料成員的型別可以是算術型別、常量、引用、指標、類型別等。類似的,靜態成員函式也不與任何物件繫結在一起,它們不包含

this

指標。靜態成員函式不能宣告為

const

的。使用作用域運算子可以直接訪問靜態成員。

靜態函式的定義:既可以在類的內部也可以在類的外部定義。如果在類的外部定義,不能重複static關鍵字,關鍵字只能出現在類的內部宣告語句。

靜態資料成員初始化:由於靜態資料不與任何乙個物件關聯,所以它們並不在建立類的物件時被定義。這意味著不是由類的建構函式初始化的。而且一般,不在類的內部初始化靜態資料成員。必須在類的外部定義和初始化每個靜態成員。

全域性變數:形參和函式體內定義的變數統稱為區域性變數。在所有函式體外定義的變數稱為全域性變數。

區域性靜態物件:某些時候,有必要令區域性變數的生命週期貫穿函式呼叫及之後的時間。可以將區域性變數定義成static型別從而獲得這樣的物件。

靜態變數和全域性變數的區別:全域性變數(外部變數

)的說明之前再冠以

static

就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。 這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式, 當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。 而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用, 因此可以避免在其它原始檔中引起錯誤。從以上分析可以看出, 把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍。 

靜態變數和全域性變數

一 全域性變數 1 在mymethod.h中 extern qstring real db path 2 在mymethod.cpp中 必須做這一步,這一步是為變數分配空間,如果不分配空間,使用的時候編譯不過 qstring real db path 3 在需要使用的地方,include mymet...

區域性變數,區域性靜態變數,全域性變數,全域性靜態變數分別

c 記憶體到底分幾個區?一 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。3 全域性...

全域性變數,全域性靜態變數,區域性靜態變數,區域性變數

變數可以分為全域性變數 靜態全域性變數 靜態區域性變數和區域性變數。按照儲存區分 全域性變數 靜態全域性變數和靜態區域性變數都存放在記憶體的全域性資料區,區域性變數存放在記憶體的棧區。按作用域分 全域性變數在整個工程檔案內都有效 靜態全域性變數只在定義它的檔案內有效 靜態區域性變數只在定義它的函式內...