在我學習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的值發生...