1.
const
常量,如
const int max = 100;
優點:const
常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換時可能會產生意料不到的錯誤。 2.
const
修飾類的資料成員。
const
資料成員只在某個物件生存期內是常量,而對於整個類而言卻是可變的。因為類可以建立多個物件,不同的物件其
const
資料成員的值可以不同。所以不能在類宣告中初始化
const
資料成員,因為類的物件未被建立時,編譯器不知道
const
資料成員的值是什麼。
const
資料成員的初始化只能在類的建構函式的初始化表中進行。 3.
const
修飾指標的情況,見下式:
const int* a = & [1]
int const *a = & [2]
int* const a = & [3]
const int* const a = & [4]
可以參考《
effective c++
》item21
上的做法,如果
const
位於星號的左側,則
const
就是用來修飾指標所指向的變數,即指標指向為常量;如果
const
位於星號的右側,
const
就是修飾指標本身,即指標本身是常量。因此,
[1]和
[2]的情況相同,都是指標所指向的內容為常量,這種情況下不允許對內容進行更改操作,如不能
*a = 3
;[3]
為指標本身是常量,而指標所指向的內容不是常量,這種情況下不能對指標本身進行更改操作,如
a++是錯誤的;
[4]為指標本身和指向的內容均為常量。 4.
const
的初始化
先看一下
const
變數初始化的情況
1) 非指標
const
常量初始化的情況:
a b;
const a a = b;
2) 指標
const
常量初始化的情況:
a* d = new a();
const a* c = d;
或者:const a* c = new a();
3)引用
const
常量初始化的情況:
a f;
const a& e = f; //
這樣作e
只能訪問宣告為
const
的函式,而不能訪問一般的成員函式; 5.
const
在函式宣告中的應用
在函式宣告中,
const
可以修飾函式的返回值,或某個引數;對於成員函式,還可以修飾是整個函式。1)
修飾引數的
const
,如void fun0(const a* a ); void fun1(const a& a);
呼叫函式的時候,用相應的變數初始化
const
常量,則在函式體中,按照
const
所修飾的部分進行常量化,如形參為
const a* a
,則不能對傳遞進來的指標的內容進行改變,保護了原指標所指向的內容;如形參為
const a& a
,則不能對傳遞進來的引用物件進行改變,保護了原物件的屬性。[注意
]:引數
const
通常用於引數為指標或引用的情況,且只能修飾輸入引數
;若輸入引數採用
「值傳遞
」方式,由於函式將自動產生臨時變數用於複製該引數,該引數本就不需要保護,所以不用
const
修飾。[總結]
對於非內部資料型別的輸入引數,應該將
「值傳遞
」的方式改為
「const
引用傳遞
」,目的是為了提高效率。例如,將
void func(a a)
改為void func(const a &a)
對於內部資料型別的輸入引數,不要將
「值傳遞
」的方式改為
「const
引用傳遞
」。否則既達不到提高效率的目的,又降低了函式的可理解性。例如
void func(int x)
不應該改為
void func(const int &x)2)
修飾返回值的
const
,如const a fun2( ); const a* fun3( );
這樣宣告了返回值後,
const按照"
修飾原則
"進行修飾,起到相應的保護作用。[總結
] 1)
一般情況下,函式的返回值為某個物件時,如果將其宣告為
const
時,多用於操作符的過載。通常,不建議用
const
修飾函式的返回值型別為某個物件或對某個物件引用的情況。
2)如果給採用
「指標傳遞
」方式的函式返回值加
const
修飾,那麼函式返回值(即指標)的內容不能被修改,該返回值只能被賦給加
const
修飾的同型別指標。 6.
類成員函式中
const
的使用一般放在函式體後,形如:
void fun() const;
任何不會修改資料成員的函式都因該宣告為
const
型別。如果在編寫
const
成員函式時,不慎修改了資料成員,或者呼叫了其他非
const
成員函式,編譯器將報錯,這大大提高了程式的健壯性。 7.
使用const
的一些建議
1 要大膽的使用
const
,這將給你帶來無盡的益處,但前提是你必須搞清楚原委;
2 要避免最一般的賦值操作錯誤,如將
const
變數賦值,具體可見思考題;
3 在引數中使用
const
應該使用引用或指標,而不是一般的物件例項,原因同上;
4 const
在成員函式中的三種用法(引數、返回值、函式)要很好的使用;
5 不要輕易的將函式的返回值型別定為
const;
6除了過載操作符外一般不要將返回值型別定為對某個物件的
const
引用;
____文章非原創,來自網上。
C 中const用法總結
c 中用法總結 1.1.1.定義普通常量 使用 define來定義常量也是常用方法,但const也可以用來定義常量,在 effective c 中建議使用const代替 define來定義常量,因為const定義的常量具有型別資訊,而巨集沒有,所以使用const定義的常量在進行賦值操作時編譯器會進行...
c 中const用法總結
const關鍵字在c 中的用法很普遍,總結了一下,大致有這些用法。1.阻止乙個變數被改變,使用const修飾,變數成為常量,因為以後不能修改它,所以定義時必須初始化。比如const int number 512。這和c語言中巨集有點類似,都是定義常量的,但是它們也有不同之處 巨集只是做簡單的字元替換...
c 中const用法總結
const關鍵字在c 中的用法很普遍,總結了一下,大致有這些用法。1.阻止乙個變數被改變,使用const修飾,變數成為常量,因為以後不能修改它,所以定義時必須初始化。比如const int number 512。這和c語言中巨集有點類似,都是定義常量的,但是它們也有不同之處 巨集只是做簡單的字元替換...