const是C語言的一種關鍵字,起受保護,防止以外的變動的作用!可以修飾變量,參數,返回值,甚至函數體。const可以提高程序的健壯性,你只管用到你想用的任何地方。
(一)const修飾參數。const只能修飾輸入參數。
1、如果輸入參數是指針型的,用const修飾可以防止指針被意外修改。
2、如果參數采用值傳遞的方式,無需const,因為函數自動產生臨時變量復制該參數。
3、非內部數據類型的參數,需要臨時對象復制參數,而臨時對象的構造,析構,復制較為費時,因此建議采用前加const的引用方式傳遞非內部數據類型。而內部數據類型無需引用傳遞。
(二)const修飾函數返回值。
1、函數返回const指針,表示該指針不能被改動,只能把該指針賦給const修飾的同類型指針變量。
2、函數返回值為值傳遞,函數會把返回值賦給外部臨時變量,用const無意義!不管是內部還是非內部數據類型。
3、函數采用引用方式返回的場合不多,只出現在類的賦值函數中,目的是為了實現鏈式表達。
(三)const+成員函數。任何不修改數據成員的函數都應該聲明為const類型,如果const成員函數修改了數據成員或者調用了其他函數修改數據成員,編譯器都將報錯!
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 表示 指向的內容不能改變
2、char * const p,就是將P聲明為常指針,它的地址不能改變,是固定的,但是它的內容可以改變。
3、這種const指針是前兩種的結合,使得指向的內容和地址都不能發生變化.
const double pi = 3.14159;
const double *const pi_ptr = π