C 中const用法總結

2021-04-25 13:48:00 字數 3351 閱讀 2287

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語言中巨集有點類似,都是定義常量的,但是它們也有不同之處 巨集只是做簡單的字元替換...