const的用法非常靈活,能夠大大增強程序的健壯性.
- 定義常量
const int c = 0;
- 保護變量不被更改
void f(const int i) { i=10;//error! }
//如果在函數體內修改了i,編譯器就會報錯
上述代碼傳遞的是副本,更改影響并不大,const往往和引用一起使用,節(jié)省空間并增強健壯性
void f(const int &i){...}
i 的值為引用,并且不允許被更改.
也可以對返回值為引用的變量加上這個修飾,這樣這個引用就不能被更改
const string& get_name() const
{
return name;
}
- 全局調整參數,類似宏定義
- 類型安全檢查
void f(const int i) { .........}
//對傳入的參數進行類型檢查,不匹配進行提示
宏定義僅僅對宏進行替換,沒有類型檢查,往往會導致意想不到的錯誤.
- 修飾成員函數
被const修飾的成員函數,不能改變這個類對象的值(指針訪問可以,但是并不推薦)
-
const對象只能訪問const成員函數,一般對象則都可以(包括const和其他共有函數)
- 節(jié)省空間
當定義const的時候,僅僅給出了常量的內存地址,并沒有分配內存.
在程序執(zhí)行過程中,僅僅進行一次內存的分配,即使這個值被引用多次.