const用法總結

2021-08-13 19:38:30 字數 2097 閱讀 9483

顧名思義:const 是常量的意思即用const修飾的都是不可變的。

1. const的用法: (1)定義常量

char arr = 「hello world」;

constchar * const p = arr;

const出現在*左邊表示被指物是常量,在右邊表示指標自身是常量。 宣告迭代器為cosnt就像宣告指標一樣,因為迭代器內部也是用指標維護的。

(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類物件呼叫。如果在編寫const 成員函式時,不慎修改了資料成員,或者呼叫了其它非const 成員函式,編譯器將指出錯誤,這無疑會提高程式的健壯性。例如:

class stack ;

int stack::getcount(void) const

注意:兩個成員函式如果只是常量性不同,可以被過載。

class a void func(){}

}在const和非const成員函式中避免重複

我覺得這是乙個非常重要的內容,有沒有加const是構成函式過載的,但通常這種過載的相似度很高,就用書上的例子:

class testblock

char& operator(size_t position)

}; 可以看到兩個過載函式裡面的操作都是一樣的,別因此認為可以用ctrl+c,ctrl+v而省事了,如果你要改動其中乙個函式體裡的內容,另乙個就要同步更新,而萬一你忘記了更新,後果是非常嚴重的!

乙個好的方法來實現同步——在非const的函式中呼叫const函式!這樣來修改:

char& operator (size_t position)

說白了,就進行兩次轉換,一次是把非const的物件(就是自己(*this)轉成const物件),但注意返回值要求是非const的,所以用const_cast再進行一次轉換就ok了。

const用法總結

1.const 一 對於基本宣告 const int r 100 標準const變數宣告加初始化,編譯器經過型別檢查後直接用100在 編譯時替換 二 對於指標 1.int x 10 const int r x 指標 指向的內容是常量 r指向的內容不能夠通過r改變,但如果指向的內容是非const 例如...

const用法總結

const的作用 const是c語言的一種關鍵字,起受保護,防止以外的變動的作用!可以修飾變數,引數,返回值,甚至函式體。const可以提高程式的健壯性,你只管用到你想用的任何地方。一 const修飾引數。const只能修飾輸入引數。1 如果輸入引數是指標型的,用const修飾可以防止指標被意外修改...

const用法總結

const修飾的常成員函式可以理解為是乙個 唯讀 函式。如果一定要修改常物件中的每個資料成員的值,對該資料成員函式宣告為mutable,如 mutable int count 把count宣告為可變資料成員,即可改變。情況1 const位於 號左邊,const修飾指標所指向的變數,即指標指向為常量,...