說明:本篇主要針對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成員函式,如果希望成員函式訪...