最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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)成員變量,你弄懂了嗎?的評論 (共 條)

分享到微博請遵守國家法律
手游| 巩留县| 巧家县| 梧州市| 梁河县| 锦屏县| 河源市| 郓城县| 东至县| 黎城县| 盐城市| 军事| 越西县| 宜州市| 潍坊市| 安泽县| 裕民县| 卢湾区| 务川| 阳春市| 穆棱市| 工布江达县| 包头市| 噶尔县| 高淳县| 大足县| 开鲁县| 郎溪县| 新密市| 嘉峪关市| 夏邑县| 新晃| 光泽县| 周至县| 法库县| 游戏| 庐江县| 珠海市| 宕昌县| 怀安县| 三门峡市|