c++中const的作用

採用符號常量寫出的代碼更容易維護;指針常常是邊讀邊移動,而不是邊寫邊移動;許多函數參數是隻讀不寫的。const最常見用途是作爲數組的界和switch分情況標號(也可以用枚舉符代替)

用法1:常量

取代了C中的宏定義,聲明時必須進行初始化。const限制了常量的使用方式,並沒有描述常量應該如何分配。如果編譯器知道了某const的所有使用,它甚至可以不爲該const分配空間。最簡單的常見情況就是常量的值在編譯時已知,而且不需要分配存儲。―《C++ Program Language》
用const聲明的變量雖然增加了分配空間,但是可以保證類型安全。
C標準中,const定義的常量是全局的,C++中視聲明位置而定。

用法2:指針和常量

使用指針時涉及到兩個對象:該指針本身和被它所指的對象。將一個指針的聲明用const“預先固定”將使那個對象而不是使這個指針成爲常量。要將指針本身而不是被指對象聲明爲常量,必須使用聲明運算符*const。
所以出現在 * 之前的const是作爲基礎類型的一部分:
char *const cp; //到char的const指針
char const *pc1; //到const char的指針
const char *pc2; //到const char的指針(後兩個聲明是等同的)
從右向左讀的記憶方式:
cp is a const pointer to char.
pc2 is a pointer to const char.

用法3:const修飾函數傳入參數

將函數傳入參數聲明爲const,以指明使用這種參數僅僅是爲了效率的原因,而不是想讓調用函數能夠修改對象的值。同理,將指針參數聲明爲const,函數將不修改由這個參數所指的對象。
通常修飾指針參數和引用參數:
void Fun( const A *in); //修飾指針型傳入參數
void Fun(const A &in); //修飾引用型傳入參數

用法4:修飾函數返回值

可以阻止用戶修改返回值。返回值也要相應的付給一個常量或常指針。

用法5:const修飾成員函數

const對象只能訪問const成員函數,而非const對象可以訪問任意的成員函數,包括const成員函數;
const對象的成員是不能修改的,而通過指針維護的對象確實可以修改的;
const成員函數不可以修改對象的數據,不管對象是否具有const性質。編譯時以是否修改成員數據爲依據進行檢查。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章