C 中的const的用處

2021-08-14 12:26:47 字數 1549 閱讀 7439

說明:本篇主要針對const的過載用法進行講解

首先,我們可以從const出現的位置來入手:

const 返回型別 函式名 (const 函式引數) const
如上述,const一共可以出現在三個位置,我們先討論出現在前兩個的const,顯而易見,第乙個const修飾的是函式返回值,表示該函式返回乙個常量,必須用const修得」變數去接「;第二個const修飾的是函式引數,表示該函式的引數是const型別,在該函式體內無法改變該引數的值,注意作用域是該函式體,這能有效的提高函式的健壯性,用的很多,舉個例子;

array &array::operator=(const

array &obj)

return *this;

} 這一串**實現的是「陣列中=」運算子的過載,如上所示,因為是賦值運算子的過載,所以不需要改變賦值量的引數,只需要改變被賦值量的引數即可,所以我們在傳參時,給引數嫁了const這就不會因為不在預料之內「意外」導致obj的值在此後函式體內改變了,提高了函式的健壯性

那麼最後乙個const是幹什麼的呢?

這就涉及到了函式過載,眾所周知,函式過載需要引數的型別,個數,順序中至少一樣是不相同的。此外const也可以作為函式過載的標誌之一。

舉個例子

clas

...int &array::operator(int i)

const

int &array::operator(int i) const

... 如上所示,1和2或者3中的任意乙個都將構成函式過載,2和3不能構成函式過載;

重複一下之前說的const加在最前面有什麼作用,(即2和3的區別)

當2執行結束後,可以被任意int型別的變數所接受;

當3執行結束後,只可以被常量接受(即被const修飾);

3中const寫在最後面,修飾的是this指標的,3這個函式是寫在類裡面的,它的原型其實長這樣的:const

int &operator (const arrat *const

this, int index);

由於寫進類中函式後,左運算元省略(其實是 arrat *const

this 被隱藏了),const arrat *const

this前面的const「找不到家了」,於是把它放到了最後面。這便是最後面const的由來了。其實只要記住最後面如果有const,那麼在該函式體中,所有呼叫該函式物件的引數都將無法改變,如上,4可以執行成功,5就不會成功了。

有關使用const進行函式過載的一些注意點:

如果輸入引數採用「指標傳遞」,那麼加const修飾可以防止意外地改動該指》> 針,起到保護作用

對於非內部資料型別的輸入引數,應該將「值傳遞」的方式改為「const引用傳》 遞」,目的是提高效率。

任何不會修改資料成員的函式都應該宣告為const型別。

c中的const與c 中的const

c中的const是乙個偽唯讀識別符號。include include int main 此時輸出a的值為20,被指標間接的改變了。c 中,const進行了增強,不在是乙個偽識別符號了。const int a 10 int p int a p 20 cout a p endl cout a endl ...

static和const的區別和用處

const總結 1.常物件 const 類名 物件名 例如const cdate d1 2008,8,8 d1就是常物件,物件d1中的所有成員的值都不能被修改,定義常物件必須要有初值,不能做左值,如果定義了常物件,則不能呼叫該物件的非const成員函式,只能訪問const成員函式,如果希望成員函式訪...

static和const的區別和用處

const總結 1.常物件 const 類名 物件名 例如const cdate d1 2008,8,8 d1就是常物件,物件d1中的所有成員的值都不能被修改,定義常物件必須要有初值,不能做左值,如果定義了常物件,則不能呼叫該物件的非const成員函式,只能訪問const成員函式,如果希望成員函式訪...