无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C++知識分享:靜態(tài)成員變量,你弄懂了嗎?

2022-01-08 18:37 作者:C語言編程__Plus  | 我要投稿

C++的static關(guān)鍵字可修飾類成員變量/方法,表示變量/方法不從屬于特定對象,而是屬于類的。仔細琢磨靜態(tài)成員變量,會發(fā)現(xiàn)其與C++的方式既相容也矛盾,具有特殊性。


先說相容的一面?!/C++·有聲明和定義的說法:聲明給出簽名,定義給出具體實現(xiàn)。對類型而言,聲明不一定能知道其對象占用空間大小,但根據(jù)定義肯定能確定內(nèi)存占用。說靜態(tài)成員與C++方式是相容的,因為其初始化方式與方法的定義一致。下面是一個例子:


相對于相容點,靜態(tài)成員變量更多展現(xiàn)出怪異的一面,以下是個人總結(jié):

(1)靜態(tài)成員不能在類中初始化;非靜態(tài)成員可直接初始化,靜態(tài)成員在類中只是聲明,所以不能直接初始化。輔以const的靜態(tài)成員可以直接初始化,但那是const的能力而非static所有;

(2)對靜態(tài)成員初始化,需要在類之外定義時再完成;

(3)初始化時不受訪問修飾符限制;private類型的靜態(tài)成員可直接訪問并賦值;

(4)靜態(tài)成員初始化時可調(diào)用函數(shù),并且可以直接調(diào)用所屬類的私有函數(shù);

其中第4點比較重要。在不支持C++11的編譯器上,要完成靜態(tài)map成員,就不得不借助函數(shù)返回:


C++11引入了統(tǒng)一初始化和lambda表達式,初始化的寫法更為簡單:


靜態(tài)成員的這些異常行為很容易聯(lián)想到全局變量,兩者有許多相通的地方:在程序啟動前完成初始化,在程序終止后銷毀;存放的地方都是靜態(tài)存儲區(qū)而非堆棧;通過名字空間操作符獲取值;在非函數(shù)塊內(nèi)通過函數(shù)調(diào)用或者lambda表達式完成初始化…

雖然各種面向?qū)ο缶幊陶Z言都有靜態(tài)變量,并且使用比例不低。但從面向?qū)ο蟮慕嵌?,靜態(tài)成員是另一種形式的全局變量,其破壞了隔離和封裝,增加了類之間的耦合,讓測試變得更困難。實際編程中,應(yīng)當慎用全局變量,并收緊其訪問權(quán)限。

所以本質(zhì)上靜態(tài)成員也是全局變量,只是歸屬到特定類的名下。

你懂了嗎?

那么今天的分享就到這里了,后續(xù)會更新更多精彩項目或者知識內(nèi)容的,大家要好好學C語言C++喲~

寫在最后:對于準備學習C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!

微信公眾號:C語言編程學習基地

C語言零基礎(chǔ)入門教程(83集全)

整理分享(多年學習的源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!



C++知識分享:靜態(tài)成員變量,你弄懂了嗎?的評論 (共 條)

分享到微博請遵守國家法律
东台市| 安西县| 盐亭县| 高要市| 丰都县| 兴仁县| 周口市| 永修县| 颍上县| 保德县| 壶关县| 洮南市| 将乐县| 抚松县| 和静县| 营山县| 阳山县| 颍上县| 米易县| 临朐县| 霍林郭勒市| 潍坊市| 内丘县| 富宁县| 铅山县| 读书| 阳春市| 湖州市| 吉木萨尔县| 加查县| 封丘县| 磐石市| 闽侯县| 隆子县| 连江县| 光山县| 衡山县| 青龙| 枣阳市| 林芝县| 砚山县|