五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

分享到微博請遵守國家法律
盐亭县| 陕西省| 凉城县| 浦城县| 芦山县| 文昌市| 高要市| 乐安县| 贵溪市| 伊川县| 武城县| 峡江县| 东源县| 三亚市| 宣恩县| 郁南县| 永兴县| 普宁市| 广宁县| 台前县| 威远县| 高陵县| 华池县| 曲水县| 北海市| 荆州市| 桦川县| 盘锦市| 彰化市| 遵义市| 汉川市| 阜新市| 城市| 荥经县| 信阳市| 横峰县| 浦城县| 包头市| 宜宾市| 泰宁县| 搜索|