詳細介紹C++中的常用修飾符static
static 是c++中很常用的修飾符,它被用來控制變量的存儲方式和可見性,下面我將從 static 修飾符的產(chǎn)生原因、作用談起,全面分析static 修飾符的實質(zhì)。
static 的兩大作用:
一、控制存儲方式:
static被引入以告知編譯器,將變量存儲在程序的靜態(tài)存儲區(qū)而非棧上空間。
1、引出原因
函數(shù)內(nèi)部定義的變量,在程序執(zhí)行到它的定義處時,編譯器為它在棧上分配空間,大家知道,函數(shù)在棧上分配的空間在此函數(shù)執(zhí)行結(jié)束時會釋放掉,這樣就產(chǎn)生了一個問題: 如果想將函數(shù)中此變量的值保存至下一次調(diào)用時,如何實現(xiàn)?
最容易想到的方法是定義一個全局的變量,但定義為一個全局變量有許多缺點,最明顯的缺點是破壞了此變量的訪問范圍(使得在此函數(shù)中定義的變量,不僅僅受此函數(shù)控制)。
2、 解決方案
因此c++ 中引入了static,用它來修飾變量,它能夠指示編譯器將此變量在程序的靜態(tài)存儲區(qū)分配空間保存,這樣即實現(xiàn)了目的,又使得此變量的存取范圍不變。
二、控制可見性與連接類型 :
static還有一個作用,它會把變量的可見范圍限制在編譯單元中,使它成為一個內(nèi)部連接,這時,它的反義詞為”extern”.
static作用分析總結(jié):
static總是使得變量或?qū)ο蟮拇鎯π问阶兂伸o態(tài)存儲,連接方式變成內(nèi)部連接,對于局部變量(已經(jīng)是內(nèi)部連接了),它僅改變其存儲方式;對于全局變量(已經(jīng)是靜態(tài)存儲了),它僅改變其連接類型。
類中的static成員:
一、出現(xiàn)原因及作用:
1、需要在一個類的各個對象間交互,即需要一個數(shù)據(jù)對象為整個類而非某個對象服務(wù)。
2、同時又力求不破壞類的封裝性,即要求此成員隱藏在類的內(nèi)部,對外不可見。
類的static成員滿足了上述的要求,因為它具有如下特征:有獨立的存儲區(qū),屬于整個類。
二、注意:
1、對于靜態(tài)的數(shù)據(jù)成員,連接器會保證它擁有一個單一的外部定義。靜態(tài)數(shù)據(jù)成員按定義出現(xiàn)的先后順序依次初始化,注意靜態(tài)成員嵌套時,要保證所嵌套的成員已經(jīng)初始化了。消除時的順序是初始化的反順序。
2、類的靜態(tài)成員函數(shù)是屬于整個類而非類的對象,所以它沒有this指針,這就導(dǎo)致了它僅能訪問類的靜態(tài)數(shù)據(jù)和靜態(tài)成員函數(shù)。
希望通過以上內(nèi)容的介紹,可以給大家?guī)韼椭?/p>
【編輯推薦】