const是C語言的一種關(guān)鍵字,起受保護(hù),防止以外的變動的作用!可以修飾變量,參數(shù),返回值,甚至函數(shù)體。const可以提高程序的健壯性,你只管用到你想用的任何地方。
(一)const修飾參數(shù)。const只能修飾輸入?yún)?shù)。
1、如果輸入?yún)?shù)是指針型的,用const修飾可以防止指針被意外修改。
2、如果參數(shù)采用值傳遞的方式,無需const,因?yàn)楹瘮?shù)自動產(chǎn)生臨時變量復(fù)制該參數(shù)。
3、非內(nèi)部數(shù)據(jù)類型的參數(shù),需要臨時對象復(fù)制參數(shù),而臨時對象的構(gòu)造,析構(gòu),復(fù)制較為費(fèi)時,因此建議采用前加const的引用方式傳遞非內(nèi)部數(shù)據(jù)類型。而內(nèi)部數(shù)據(jù)類型無需引用傳遞。
(二)const修飾函數(shù)返回值。
1、函數(shù)返回const指針,表示該指針不能被改動,只能把該指針賦給const修飾的同類型指針變量。
2、函數(shù)返回值為值傳遞,函數(shù)會把返回值賦給外部臨時變量,用const無意義!不管是內(nèi)部還是非內(nèi)部數(shù)據(jù)類型。
3、函數(shù)采用引用方式返回的場合不多,只出現(xiàn)在類的賦值函數(shù)中,目的是為了實(shí)現(xiàn)鏈?zhǔn)奖磉_(dá)。
(三)const+成員函數(shù)。任何不修改數(shù)據(jù)成員的函數(shù)都應(yīng)該聲明為const類型,如果const成員函數(shù)修改了數(shù)據(jù)成員或者調(diào)用了其他函數(shù)修改數(shù)據(jù)成員,編譯器都將報(bào)錯!
class stack
{
public:
void push(int elem);
void pop(void);
int GetCount(void) const ;
private:
int m_num;
int m_date[10];
};
int stack::GetCount(void) const
{
m_num++;
}
編譯器輸出錯誤信息:error C2166: l-value specifies const object。
(四)const 修飾變量,表示該變量不能被修改。
1、const char *p 表示 指向的內(nèi)容不能改變
2、char * const p,就是將P聲明為常指針,它的地址不能改變,是固定的,但是它的內(nèi)容可以改變。
3、這種const指針是前兩種的結(jié)合,使得指向的內(nèi)容和地址都不能發(fā)生變化.
const double pi = 3.14159;
const double *const pi_ptr = π