我為什么還要如此看重關(guān)鍵字const呢英遭?我也如下的幾下理由:
1) 關(guān)鍵字const的作用是為給讀你代碼的人傳達(dá)非常有用的信息胁赢,實(shí)際上企蹭,聲明一個(gè)參數(shù)為常量是為了告訴了用戶這個(gè)參數(shù)的應(yīng)用目的。如果你曾花很多時(shí)間清理其它人留下的垃圾智末,你就會(huì)很快學(xué)會(huì)感謝這點(diǎn)多余的信息谅摄。(當(dāng)然,懂得用const的程序員很少會(huì)留下的垃圾讓別人來清理的系馆。)
2) 通過給優(yōu)化器一些附加的信息送漠,使用關(guān)鍵字const也許能產(chǎn)生更緊湊的代碼。
3) 合理地使用關(guān)鍵字const可以使編譯器很自然地保護(hù)那些不希望被改變的參數(shù)由蘑,防止其被無意的代碼修改闽寡。簡而言之代兵,這樣可以減少bug的出現(xiàn)。
const關(guān)鍵字至少有下列5個(gè)作用:
(1)欲阻止一個(gè)變量被改變爷狈,可以使用const關(guān)鍵字植影。在定義該const變量時(shí),通常需要對(duì)它進(jìn)行初始化涎永,因?yàn)橐院缶蜎]有機(jī)會(huì)再去改變它了思币;
(2)對(duì)指針來說,可以指定指針本身為const羡微,也可以指定指針?biāo)傅臄?shù)據(jù)為const谷饿,或二者同時(shí)指定為const;
(3)在一個(gè)函數(shù)聲明中妈倔,const可以修飾形參博投,表明它是一個(gè)輸入?yún)?shù),在函數(shù)內(nèi)部不能改變其值启涯;
(4)對(duì)于類的成員函數(shù)贬堵,若指定其為const類型,則表明其是一個(gè)常函數(shù)结洼,不能修改類的成員變量黎做;
(5)對(duì)于類的成員函數(shù),有時(shí)候必須指定其返回值為const類型松忍,以使得其返回值不為“左值”蒸殿。
舉例:
// const兩種用法
//?const:修飾基本變量p
//?這兩種寫法是一樣的,const只修飾右邊的基本變量b
const?int?b?=?20;?//?b:只讀變量
int?const?b?=?20;?//?b:只讀變量
//?不允許修改值
b?=?1;
//?const:修飾指針變量*p鸣峭,帶*的變量宏所,就是指針變量.
//?定義一個(gè)指向int類型的指針變量,指向a的地址
int?*p?=?&a;
int?c?=?10;
p?=?&c;
//?允許修改p指向的地址摊溶,
//?允許修改p訪問內(nèi)存空間的值
*p?=?20;
//?const修飾指針變量訪問的內(nèi)存空間爬骤,修飾的是右邊*p1,
//?兩種方式一樣
const?int?*p1;?//?*p1:常量?p1:變量
int?const?*p1;?//?*p1:常量?p1:變量
//?const修飾指針變量p1
int?*?const?p1;?//?*p1:變量?p1:常量
//?第一個(gè)const修飾*p1?第二個(gè)const修飾?p1
//?兩種方式一樣
const?int?*?const?p1;?//?*p1:常量?p1:常量
int?const?*?const?p1;??//?*p1:常量?p1:常量