C 中的const用法簡記

2022-08-24 11:03:11 字數 2618 閱讀 4297

內容來自網際網路,謹蒐集整理在此

如果const關鍵字不涉及到指標,我們很好理解,下面是涉及到指標的情況:

int b = 500;

const int* a = &b; [1]

int const* a = &b; [2]

int* const a = &b; [3]

const int* const a = &b; [4]

看起來有四種情況實際上只有兩種:

如果const位於星號的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量;

如果const位於星號的右側,const就是修飾指標本身,即指標本身是常量。

因此,[1]和[2]的情況相同,都是指標所指向的內容為常量,這種情況下不允許對變數的值進行更改操作,如不能*a = 3;

[3]為指標本身是常量,而指標所指向的內容不是常量,這種情況下不能對指標本身進行更改操作,如a++是錯誤的;

[4]為指標本身和指向的內容均為常量。

另外const 的一些強大的功能在於它在函式宣告中的應用。在乙個函式宣告中,const 可以修飾函式的返回值,或某個引數;對於成員函式,還可以修飾是整個函式。有如下幾種情況:

int& operator=(const int& a);

void fun0(const int* a );

void fun1( ) const; //fun1( ) 必須為類成員函式

const int fun2( );

先看一下const變數初始化的情況

int b;

const int a = b;

int* d = new int();

const int* c = d;

const int* c = new int();

int f;

const int& e = f;

myclass m1;

const myclass& m2 = m1;

//這樣作e只能訪問宣告為const的函式,而不能訪問一般的成員函式;

[思考1]: 以下的這種賦值方法正確嗎?

const int* c=new int();

int* e = c;

[思考2]: 以下的這種賦值方法正確嗎?

int* const c = new int();

int* b = c;

其實,不論是引數還是返回值,道理都是一樣的,引數傳入時候和函式返回的時候,初始化const變數

void fun0(const int* a );

void fun1(const int& a);

呼叫函式的時候,用相應的變數初始化const常量,則在函式體中,按照const所修飾的部分進行常量化,如形參為const int* a,則不能對傳遞進來的指標的內容進行改變,保護了原指標所指向的內容;如形參為const int& a,則不能對傳遞進來的引用物件進行改變,保護了原物件的屬性。

[注意]:引數const通常用於引數為指標或引用的情況;

const int fun2( );

const int* fun3( );

這樣宣告了返回值後,const按照」修飾原則」進行修飾,起到相應的保護作用。

const rational operator*(const rational& lhs, const rational& rhs)

返回值用const修飾可以防止允許這樣的操作發生:

rational a,b;

radional c;

(a*b) = c;

一般用const修飾返回值為物件本身的情況多用於二目操作符過載函式並產生新物件的時候。

[總結]

一般情況下,函式的返回值為某個物件時,如果將其宣告為const時,多用於操作符的過載。通常,不建議用const修飾函式的返回值型別為某個物件或對某個物件引用的情況。

原因如下:

如果返回值為某個物件為const或某個物件的引用為const,則返回值具有const屬性,則返回例項只能訪問類a中的公有資料成員和const成員函式,並且不允許對其進行賦值操作,這在一般情況下很少用到。

[思考3]: 這樣定義賦值操作符過載函式可以嗎?

const a& operator=(const a& a);

一般放在函式體後,形如:void fun() const;

如果乙個成員函式不會修改資料成員,那麼最好將其宣告為const,因為const成員函式中不允許對資料成員進行修改,如果修改,編譯器將報錯,這大大提高了程式的健壯性。

1、要大膽的使用const,這將給你帶來無盡的益處,但前提是你必須搞清楚原委;

2、要避免最一般的賦值操作錯誤,如將const變數賦值,具體可見思考題;

3、在引數中使用const應該使用引用或指標,而不是一般的物件例項,原因同上;

4、const在成員函式中的三種用法要很好的使用;

5、不要輕易的將函式的返回值型別

6、除了過載操作符外一般不要將返回值型別定為對某個物件的const引用;

C 中const的用法

1 const修飾普通變數和指標 1 const修飾普通變數 其寫法有2種 a const type value b type const value 這兩種寫法本質上是一樣的。其含義是 const修飾的型別為type的變數value是不可變的。2 const修飾指標 a const char va...

關於c 中const的用法

1.當然最常用的還是作為常量。1 const int p的用法,表示指向的值得型別不變還是int型,但p的值可以變,可以這樣理解 自以為指向const的指標 可以將非const的物件賦值給他例如可以這樣 int i 3 int j 4 const int p p i cout p p j cout ...

c 中const的用法詳解

const是用於保護程式的健壯性,減少程式隱患。const的用法比較複雜,總結起來又分為以下兩種 1 在定義變數時使用 a const int a 100 最簡單的用法,說明變數a是乙個常變數 b int const b 100 與a功能相同 c const int a b 指向常數的指標,即指標本...