C const注意點以及用法

2021-07-24 21:03:41 字數 1646 閱讀 8801

在我學習c++的過程中,對const的應用不可不說是最容易混亂和最容易出錯的。但是const卻是乙個好東西,每乙個c++程式設計師都必須掌握它。以下為本人的一點總結。

1、用const 修飾函式的引數

如果引數作輸出用,不論它是什麼資料型別,也不論它採用「指標傳遞」還是「引用傳遞」,都不能加const 修飾,否則該引數將失去輸出功能。const 只能修飾輸入引數。

a, 如果輸入引數採用「值傳遞」,由於函式將自動產生臨時變數用於複製該引數,該輸入引數本來就無需保護,所以不要加const 修飾。

b,對於非內部資料型別的輸入引數,應該將「值傳遞」的方式改為「const 引用傳遞」,目的是提高效率。

例如將void func(a a)  改為void func(const a &a)。

c,對於內部資料型別的輸入引數,不要將「值傳遞」的方式改為「const 引用傳遞」。否則既達不到提高效率的目的,又降低了函式的可理解性。

例如void func(int x)  不應該改為void func(const int &x)。

2、用const 修飾函式的返回值

a,  如果給以「指標傳遞」方式的函式返回值加 const 修飾,那麼函式返回值(即指標)的內容不能被修改,該返回值只能被賦給加const 修飾的同型別指標。

例如函式

const char * getstring(void);

如下語句將出現編譯錯誤:

char *str = getstring();

正確的用法是

const char *str = getstring(); 

b, 如果函式返回值採用「值傳遞方式」,由於函式會把返回值複製到外部臨時的儲存單元中,加const 修飾沒有任何價值。

例如不要把函式int getint(void) 寫成const int getint(void) 。

同理不要把函式a geta(void)  寫成const a geta(void) ,其中a 為使用者自定義的資料型別。

3、 const 成員函式

int stack::getcount(void)  const

任何不會修改資料成員的函式都應該宣告為const 型別。如果在編寫const 成員函式時,不慎修改了資料成員,或者呼叫了其它非const 成員函式,編譯器將指出錯誤。

4、const 指標

a、將const放在指標變數型別之前。

例如:float f; const float *pf=&f;

表示指標變數指向的資料是乙個常量,即不能改變指標指向的資料的值,但可使指標變數指向其他變數。

b、將const 放在*之後,變數名之前。

例如:int i; int *const pi=&i;

表示指標變數的指向不能改變,但可改變指標變數所指向的資料的值。

c、const 乙個放在指標變數型別之前,乙個放在指標變數名之前。

例如:int i; const int *const pi=&i;

表示指標變數的值,及其所指向的資料都是乙個常量,所以都不能改變他們的值。

5、在定義const 物件時必須初始化,因為常量在定義後就不能被修改。例如:const string s="hello";且預設為檔案的區域性變數,要使const 變數能夠在其他的檔案中訪問,必須顯式地指定它為extern。例如:extern const int i=0;

sizeof 的用法以及注意點

c語言裡的sizeof 是乙個計算資料儲存空間大小的單目運算子,它返回資料所佔的位元組個數,我們可以先來看看 裡的定義 sizeof operator sizeof expression the sizeof keyword gives the amount of storage,in bytes,...

C const用法總結

const名叫常量限定符,用來限定特定變數,以通知編譯器該變數是不可修改的。使用const,可以避免在函式中對某些不應修改的變數造成可能的改動。非const 變數預設為extern,這樣就不可以被程式其它檔案訪問,要想const變數能夠被在其他的檔案中訪問,必須顯式地指定它為extern,如exte...

c const用法總結

看了好多博主寫的關於const的總結,總是仁者見仁,智者見智,好多博主都多多少少的有一些錯誤,在這總結一下c const的用法,我的文章中也可能會有錯誤,望指正!一.定義常量 1 const修飾變數 int const a 5 const int a 5 這兩種定義方法是一樣的,都是不希望a的值發生...