總結const的用法

2021-09-26 07:47:47 字數 1473 閱讀 7525

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 例如...