一 、const基礎
如果const關鍵字不涉及到指標,我們很好理解,下面是涉及到指標的情況:
int b = 500;
const int* a = &b; [1]
int const *a = &b; [2]
int* const a = &b; [3]
const int* const a = &b; [4]
如果你能區分出上述四種情況,那麼,恭喜你,你已經邁出了可喜的一步。不知道,也沒關係,我們可以參考《Effective c++》Item21上的做法,
如果const位於星號的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量;
如果const位於星號的右側,const就是修飾指標本身,即指標本身是常量。
因此,[1]和[2]的情況相同,都是指標所指向的內容為常量(const放在變數聲明符的位置無關),這種情況下不允許對內容變更操作,如不能*a = 3 ;
[3]為指標本身是常量,而指標所指向的內容不是常量,這種情況下不能對指標本身變更操作,如a++是錯誤的;
[4]為指標本身和指向的內容均為常量。
二 作為參數
void display(const double& r);或者void display(const double* r);
說明:
1 在引用或者指標參數的時候使用const限制是有意義的,而對於值傳遞的參數使用const則沒有意義
2 保證引用的變數的值不被改變
3 const在double前或者後面意思相同,只是不同的人的寫法不同
三 const對象
聲明為const的對象只能訪問類中聲明為const的成員函數,不能調用其它成員函數.
四 const成員函數
類型說明符 函數名(參數表)const; void print(int i) const;
說明:
1 const是函數類型的一個組成部分,因此在實現部分也要帶const關鍵字.
2 常成員函數不能更新對象的資料成員,也不能調用該類中沒有用const修飾的成員函數.
五 使用const的一些建議
1 要大膽的使用const,這將給你帶來無盡的益處,但前提是你必須搞清楚原委;
2 要避免最一般的賦值操作錯誤,如將const變數賦值,具體可見思考題;
3 在參數中使用const應該使用引用或指標,而不是一般的對象執行個體,原因同上;
4 const在成員函數中的三種用法(參數、傳回值、函數)要很好的使用;
5 不要輕易的將函數的傳回值類型定為const;
6除了重載操作符外一般不要將傳回值類型定為對某個對象的const引用;