const的用法:
(1)定義常量
(2)修飾函式的引數
(3)修飾函式的返回值
(4)修飾函式的定義體
用const 修飾函式的引數
(1)const 只能修飾輸入引數
如果輸入引數採用「指標傳遞」,那麼加const 修飾可以防止意外地改動該指標。
例如:void stringcopy(char *strdestination, const char *strsource);
(2)如果輸入引數採用「值傳遞」,由於函式將自動產生臨時變數用於複製該引數,該輸入引數本來就無需保護,所以不要加const 修飾。
例如:不要將函式void func1(int x) 寫成void func1(const int x)。
(3)對於非內部資料型別的輸入引數,應該將「值傳遞」的方式改為「const 引用傳遞」,目的是提高效率。
例如:將void func(a a) 改為void func(const a &a)。
因為函式體內將產生a 型別的臨時物件用於複製引數a,而臨時物件的構造、複製、析構過程都將消耗時間;「引用傳遞」僅借用一下引數的別名而已,不需要產生臨時物件。
(4)對於內部資料型別的輸入引數,不要將「值傳遞」的方式改為「const 引用傳遞」。否則既達不到提高效率的目的,又降低了函式的可理解性。
例如:void func(int x) 不應該改為void func(const int &x)。
因為內部資料型別的引數不存在構造、析構的過程,而複製也非常快,「值傳遞」和「引用傳遞」的效率幾乎相當。
用const 修飾函式的返回值
(1)如果給以「指標傳遞」方式的函式返回值加const 修飾,那麼函式返回值(即指標)的內容不能被修改,該返回值只能被賦給加const 修飾的同型別指標。
例如:函式const char * getstring(void);
正確的用法是: const char *str = getstring(); //寫為char *str = getstring();將出現編譯錯誤
(2)如果函式返回值採用「值傳遞」方式,由於函式會把返回值複製到外部臨時的儲存單元中,加const 修飾沒有任何價值。
例如:不要把函式int getint(void) 寫成const int getint(void)。
(3)函式返回值採用「引用傳遞」的場合並不多,這種方式一般只出現在類的賦值函式
4.const 成員函式
任何不會修改資料成員的函式都應該宣告為const 型別。如果在編寫const 成員函式時,不慎修改了資料成員,或者呼叫了其它非const 成員函式,編譯器將指出錯誤,這無疑會提高程式的健壯性。例如:
[cpp] view plain copy
class stack
;int stack::getcount(void) const
const 關鍵字只能放在函式宣告的尾部,大概是因為其它地方都已經被占用了。
總結const的用法
1.const的用法 1 定義常量 2 修飾函式的引數 3 修飾函式的返回值 4 修飾函式的定義體 2.用const 修飾函式的引數 1 const 只能修飾輸入引數 如果輸入引數採用 指標傳遞 那麼加const 修飾可以防止意外地改動該指標。例如 void stringcopy char strd...
const的用法總結
1.const的主要用法 1 定義常量 2 修飾函式的引數 3 修飾函式的返回值 4 修飾函式的定義體 5 const替代巨集 define 2.用const 修飾函式的引數 1 const 只能修飾輸入引數 如果輸入引數採用 指標傳遞 那麼加const 修飾可以防止意外地改動該指標。例如 void...
const用法總結
1.const 一 對於基本宣告 const int r 100 標準const變數宣告加初始化,編譯器經過型別檢查後直接用100在 編譯時替換 二 對於指標 1.int x 10 const int r x 指標 指向的內容是常量 r指向的內容不能夠通過r改變,但如果指向的內容是非const 例如...