c++中關鍵字const的使用非常靈活,如果能夠恰當的使用const,可以在一定程度上提高程式的安全性和可靠性。
關鍵字const的使用:
1.定義常量
如:
1const
int pi = 3.1415926;
const常量有資料型別,編譯器在編譯時會進行型別安全檢查。而巨集常量沒有資料型別,只進行字元的替換,沒有型別安全檢查,在字元替換時有可能會產生錯誤(邊際效應)。
2.修飾指標
如:
1const
int *p = &a;
宣告p為乙個指向常量a的指標,p指向的物件不能修改,但他可以指向任何位址的常量。
1intconst *p = &a;
宣告p為乙個指向常量a的指標,p指向的物件不能修改,但他可以指向任何位址的常量。
1int * const p = &a;
宣告p為乙個常量指標,它指向a,p這個指標指向的物件不能修改,但他指向的位址的內容可以修改。
1const
int * const p = &a;
宣告p是乙個指向常量的常量型指標。
注意:如果const位於*的左側,則const就是用來修飾指標所指向的變數,即指標指向 為常量;如果const位於*的右側,const就是修飾指標本身,即指標本身為常量。
3.修飾函式
3.1 修飾函式的引數
如:
1void func(const a &a);
形參為const a &a,則不能對傳遞進來的引用物件進行改變,保護了原物件的屬性。
1void func(const a *a);
形參為const a *a,則不能對傳遞進來的指標的內容進行改變,保護了原指標所指向的內容。
注意:const修飾引數通常用於引數為指標或引用的情況,且只能修飾輸入引數;若輸入引數採用「值傳遞」方式,由於函式將自動產生臨時變數用於複製該引數,該引數就不需要保護,所以不用const修飾。
3.2 修飾函式的返回值
如:
1const a *func();
函式返回的指標指向的物件是乙個const物件,它必須賦給乙個同樣是指向const物件的指標。
1const a * const func();
比之前多了乙個const,這個const只是在它被用作左值時有效,這個指標除了指向const物件以外,它本身也不能修改,所以就不能當作左值來處理。
注意:一般情況下,函式的返回值為某個物件時,如果將其宣告為const時,多用於操作符的過載。通常,不建議使用const修飾函式的返回值型別為某個物件或者對某個物件的引用的情況。如果給採用「指標傳遞」方式的函式返回值加const修飾,那麼函式返回值(即指標)的內容不能被修改,該返回值只能被附給加const修飾的通型別指標。
4.修飾類
4.1 修飾類的資料成員
如:
1classa2
;
const資料成員只在某個物件生存期內是常量,而對於整個類而言卻是可變的。因為類可以建立多個物件,不同的物件其const資料成員的值可以不同。所以不能在類宣告中初始化const資料成員,因為類的物件未被建立時,編譯器不知道const資料成員的值是什麼。const資料成員的初始化只能在類的建構函式的初始化表中進行。要想建立整個類中都恆定的常量,應該用類中的列舉常量來實現。
如:
1classa2
;4......
5 };
列舉常量不會占用物件的儲存空間,他們在編譯時被全部求值。但是列舉常量的隱含資料型別是整數,其最大值有限,且不能表示浮點數。
4.2 修飾類的成員函式
如:
1void func() const;
任何不會修改資料成員的函式都因該宣告為const型別。如果在編寫const成員函式時,修改了資料成員,或者呼叫了其他非const成員函式,編譯器將會報錯。
注意:類的建構函式和析構函式都不能是const函式。
C 之const的使用
const是常量意思 常量是不可以被改變的 const int a 1 intconst a 1 所表示的都是啊a 1 且a不可以被改變 const可以修飾指標 p是指標所指的數值 p是指標的位址 所以 如果const位於 的左側,即指標指向為常量 const p 如果const位於 的右側,即指標...
C 入坑系列 六 之const和指標
在實際的開發過程中,您是否聽過指標常量和常量指標?又是否知道它們之間的區別呢?雖然兩者的名稱是非常相似的,但是兩者的工作原理卻有著很大的區別。本文目的便是希望能夠讓大家理解起來更加容易,如有不足和疏漏之處,還望各位讀者不吝指正,謝謝!指標本身是乙個常量,即指標的指向是不能更改的,但是可以通過指標修改...
C中CONST的使用
基本解釋 const是乙個c語言的關鍵字,它限定乙個變數不允許被改變。使用const在一定程度上可以提高程式的健壯性,另外,在 別人 的時候,清晰理解const所起的作用,對理解對方的程式也有一些幫助。雖然這聽起來很簡單,但實際上,const的使用也是c語言中乙個比較微妙的地方,微妙在何處呢?請看下...