日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
static關(guān)鍵字的使用方法

static,即靜態(tài)聲明。它在 作用域、存儲(chǔ)方式、生命周期 等各方面影響一個(gè)變量或函數(shù)。文章將從 局部變量、全局變量、普通函數(shù)、類的static成員(包括數(shù)據(jù)成員與成員函數(shù))來總結(jié)static。

成都創(chuàng)新互聯(lián)公司提供高防服務(wù)器、云服務(wù)器、香港服務(wù)器、德陽電信服務(wù)器托管

  • 全局變量

所有的全局變量,無論是否是static的,都是存儲(chǔ)于靜態(tài)存儲(chǔ)區(qū)的。全局變量本身就是靜態(tài)存儲(chǔ)方式,將全局變量聲明為static是為了將變量的作用域限制在本翻譯單元中(本源文件中),使該全局變量不能被源程序的其他翻譯單元所引用。普通全局變量使用extren聲明可以拓展其作用域至其他翻譯單元中。

可以總結(jié)為:static改變了全局變量的作用域,而不改變變量的存儲(chǔ)位置與生命周期。

  • 局部變量

局部變量即在函數(shù)內(nèi)定義的或在塊中定義的變量。static對(duì)局部變量的作用不同于全局變量。普通局部變量在離開其作用域(如離開定義它的函數(shù)或塊的花括號(hào))時(shí)即消失,而static變量卻存在于程序運(yùn)行的整個(gè)過程,也即是說,static聲明改變了局部變量的生命周期。普通局部變量是存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)的(堆),而static局部變量是存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū),因而普通局部變量在函數(shù)每次被調(diào)用時(shí)都被重新分配內(nèi)存地址,而靜態(tài)局部變量則在程序運(yùn)行過程中占據(jù)固定的內(nèi)存。

可以總結(jié)為:static改變了局部變量的存儲(chǔ)方式與生命周期,而不改變變量的作用域。

  • 普通函數(shù)

這里的普通函數(shù)是為了與類的成員函數(shù)區(qū)別開來。函數(shù)在定義時(shí)默認(rèn)是外部的,通過extren聲明即可被其他源文件引用,static聲明將函數(shù)的作用域限制在本翻譯單元中,成為內(nèi)部函數(shù)。static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個(gè)調(diào)用中維持一份拷貝。

可以總結(jié)為:static使得函數(shù)在內(nèi)存中只有一份,并將函數(shù)作用域限制在當(dāng)前源文件。

另外,static有幾個(gè)優(yōu)點(diǎn)總被提起:

1. 避免了鏈接時(shí)與其他源文件中的變量命名引起沖突。

2.對(duì)于c函數(shù)而言,static對(duì)函數(shù)進(jìn)行了信息屏蔽,只給當(dāng)前文件中其他函數(shù)使用。

  • 類static成員

static聲明對(duì)類成員的作用可以這樣概括:static使得成員從“屬于類對(duì)象”變成了“屬于類,而不屬于類對(duì)象”。

對(duì)于數(shù)據(jù)成員:

1.static數(shù)據(jù)成員必須在類定義體的外部進(jìn)行定義。

class BOOK
{
   private:
       //折扣
       static float discount;
};
//在類定義體外部定義并初始化
float BOOK::discount = 0.95f;

2.不像普通數(shù)據(jù)成員,static數(shù)據(jù)成員不能在構(gòu)造函數(shù)中進(jìn)行初始化。正如上面所說,它只能在類外部定義并初始化。然而有一個(gè)例外,整型的const static 數(shù)據(jù)成員可以在類的定義體中進(jìn)行初始化。但需注意的是,const static數(shù)據(jù)成員在類的定義體中初始化時(shí),該數(shù)據(jù)成員仍必須在類的定義體之外進(jìn)行定義(不必再指定初始值了)。

class BOOK
{
   private:
       //折扣
       const static  int  discount=1;
};
const  int BOOK::discount;
  • 類static成員函數(shù)

在類內(nèi)部聲明的static成員函數(shù),在類定義體外部進(jìn)行定義時(shí)無須重復(fù)指定static關(guān)鍵字。

對(duì)于static成員函數(shù),它同樣是不屬于類對(duì)象的,因而它沒有this指針。它可以直接訪問類的static數(shù)據(jù)成員,不能直接使用非static成員,原因是非static數(shù)據(jù)成員屬于類對(duì)象,使用非static數(shù)據(jù)成員時(shí)必須通過this指針來確定是這些成員屬于哪個(gè)類對(duì)象,然而上面說了,static成員函數(shù)沒有this指針。

static成員函數(shù)不能被聲明為const。實(shí)際上,成員函數(shù)被聲明為const的本質(zhì)是它向編譯器保證不會(huì)通過這個(gè)函數(shù)來修改類對(duì)象在內(nèi)存中的每一個(gè)bit的內(nèi)容(可以看《effective C++》 條款03 “盡可能使用const” ),然而我們知道,static成員函數(shù)并不屬于類對(duì)象,更談不上要保證不修改某一對(duì)象的內(nèi)存了。

另外,虛函數(shù)不能為聲明為static,為什么呢?原因還是static成員函數(shù)沒有this指針。virtual funtion運(yùn)行時(shí)綁定是多態(tài)的基礎(chǔ),沒有this指針多態(tài)的概念無法踐行。】


標(biāo)題名稱:static關(guān)鍵字的使用方法
文章源于:http://www.dlmjj.cn/article/ccopoog.html