C語言中const的用法詳解
const是constant的簡寫,用來定義常量,它限定一個(gè)變量不允許被改變,產(chǎn)生靜態(tài)作用。const最開始推出的目的是為了取代預(yù)編譯指令,取長補(bǔ)短。
const是一個(gè)C語言的關(guān)鍵字,它限定一個(gè)變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在觀看別人代碼的時(shí)候,清晰理解const所起的作用,對(duì)理解對(duì)方的程序也有一些幫助。另外CONST在其他編程語言中也有出現(xiàn),如C++、PHP5、C#.net、HC08C。
與define的對(duì)比
define是預(yù)編譯指令,定義的宏是在預(yù)處理階段展開的,而const是普通變量的定義,是只讀變量,且是在編譯運(yùn)行階段使用的。
define定義的是常量,define定義的宏在編譯后消失了,它不占用內(nèi)存,而const定義的常變量本質(zhì)上仍然是一個(gè)變量,具有變量的基本屬性,有類型、占用存儲(chǔ)單元,除了不能作為數(shù)組的長度,用const定義的常變量具有宏的優(yōu)點(diǎn),而且使用更方便。
define定義的對(duì)象沒有數(shù)據(jù)類型,編譯器只能機(jī)械地進(jìn)行字符替換,沒有類型安全檢查,即會(huì)出現(xiàn)“
邊際問題
”或者是“括號(hào)問題
”。而const定義的是變量,有數(shù)據(jù)類型。
為什么不能在一個(gè)常量對(duì)象中調(diào)用非常成員函數(shù)?
因?yàn)樵谀J(rèn)情況下,this的類型是指向類的非常量版本的常量指針(意思是this的值不能改變,永遠(yuǎn)指向那個(gè)對(duì)象,即“常量指針”,但是被this指向的對(duì)象本身是可以改變的,因?yàn)槭欠浅A堪姹?,這里this相當(dāng)于是頂層const),而this盡管是隱式的,它仍然需要遵循初始化規(guī)則,普通成員函數(shù)的隱式參數(shù)之一是一個(gè)底層非const指針,在默認(rèn)情況下我們無法把一個(gè)底層const的this指針轉(zhuǎn)化為非const的this指針,因此我們不能在常量對(duì)象上調(diào)用普通的成員函數(shù)。因此在上例中,形參列表后的const就意味著默認(rèn)this指針應(yīng)該是一個(gè)底層const, 類型是 const ClassName&。而非常對(duì)象卻可以調(diào)用常成員函數(shù),因?yàn)榈讓臃莄onst可以默認(rèn)轉(zhuǎn)化為底層const。
WRITE-BUG研發(fā)團(tuán)隊(duì)衷心希望【W(wǎng)RITE-BUG數(shù)字空間】可以給每位同學(xué)一個(gè)屬于自己的秘密空間,同時(shí)祝愿大家在“公開圈子”世界里,遇見志同道合的伙伴們,因?yàn)槲覀兣c大家一樣,都曾孤獨(dú)前行著。


