一 概述
被const修飾的變數都是唯讀的,當你的程式改變其值的時候,編譯器會報錯。const一般用來修飾變數,函式的引數,返回值和函式本身等。
1.1 修飾變數
const int a = 10; //定義乙個const的int變數
const char * p = "hello world"; //const字串
char * const p = "hello world"; //const指標p
const char * const p = "hello world"; //指向const字串的const指標p
1.2 函式引數
const只能修飾輸入引數:輸入引數採用指標傳遞的時候,使用const可以防止意外改變指標所指的值,比如 void strcopy( char * strdest, const char * strsrc);
如果引數是值傳遞的話,那麼就不用加上const修飾了,因為值傳遞的原理是申請乙個臨時的變數,將引數賦值給該變數,因此對臨時變數的操作不會影響到原來變數的值。
對於非內部資料型別的變數:void func(string a),如果不採用引用傳遞的話,函式效率很低,會呼叫函式的建構函式和析構函式來建立乙個臨時的string物件,加了引用後,如果程式中要改變引數的話,這樣是不行的,我們需要加上const,正確的形式為:void func(const string &a)。對於內部資料直接值傳遞就好了,因為不會有建構函式和析構函式的產生。
1.3 返回值
(1)如果給採用指標傳遞的方式的函式返回值加const修飾,那麼函式返回值(即指標)的內容不能修改,該返回值只能賦值給加了const修飾的同型別指標。
const char * getstring(void);
const char * p = getstring();
(2) 如果函式採用了值傳遞的方式,那麼不需要加const,因為函式會把返回值複製到外部臨時的儲存單元中。
int getint(void) 錯誤的形式:const int getint(void)
(3) 函式採用引用傳遞的場合不多,這種方式一般只出現在類的賦值函式中,是為了方便連續賦值。
string strone, strtwo, strthree;
strone = strtwo = strthree;
1.4 cosnt成員函式
任何不會修改資料成員的函式應該宣告為const型別,在const函式中修改了成員變數或者呼叫了非const函式,編譯器都會報錯。
class stack
;int stack::getcount(void) const
用好了const可以給你的程式帶來很好的健壯性和高效率性
const關鍵字用法
1 const常量 如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換時可能會產生意料不到的錯誤 邊際效應 2 const修飾類的資料成員 class a const...
const關鍵字用法
const修飾符表示該變數的值不能被改變。但得分兩種情況討論 修飾普通變數和修飾指標變數。1.普通常量 const int foo 5 表示foo不能再被賦值 foo 8 錯誤,因為foo是const修飾為不可變常量了 2.修飾指標 const char p test 表示p指向 的記憶體不可改變,...
const關鍵字的用法
const關鍵字主要是阻止對變數或者引數的改變。對const關鍵字主要有四種用法 1 const變數 可以將const應用於乙個簡單的變數。一旦變數被使用const定義後,編譯器將拒絕所有的為這個變數賦值的語句。給這個變數賦值的唯一方法就是通過初始化來完成。const int i 123 i 100...