C++類成員函數(shù)后面加const問題
C++類成員函數(shù)后面加const
如果類的成員函數(shù)后面加了const關(guān)鍵字,說明這個函數(shù)是不能改變類中的成員變量的。
如果在編寫該函數(shù)會修改類中的成員變量,編譯時會出錯,并且也提高了程序的可讀性,當(dāng)我們看到函數(shù)后面有const的話就知道這個函數(shù)是不會修改類中數(shù)據(jù)的。
注意:
1、只能加在非靜態(tài)成員函數(shù)后面,加在靜態(tài)成員函數(shù)和普通函數(shù)后面會編譯出錯。
2、【例外】如果一個類中有mutable 修飾的成員變量,此類函數(shù)是可以修改的。
3、【實現(xiàn)】其實就是在該類函數(shù)的this隱式參數(shù)的類型為const。
3、const對象只能調(diào)用此類函數(shù),非const對象沒有這個限制,所以為了讓const對象調(diào)用等多的成員函數(shù),如果一個成員函數(shù)不會修改類中數(shù)據(jù)的話最好在后面加const。
C++const四種用法
一、用const修飾函數(shù)參數(shù)
1、修飾指針,可以防止指針被修改
void test(const ClassA* a)
{
?? ?ClassA **b = &a; //編譯錯誤,對const指針取地址,需要用一個指向const指針的指針指向它
?? ?const ClassA **c = &a; //正確,對const指針取地址,需要用一個指向const指針的指針指向它
?? ?ClassA *d = a; //編譯錯誤,不能將const指針轉(zhuǎn)普通指針
?? ?(*b) = new ClassA();
}
void test2(ClassA *a)
{
?? ?ClassA **b = &a;
?? ?(*b) = new ClassA();
}2、修飾普通類型,說明這個參數(shù)不應(yīng)該被修改
void test(const int a)
{
?? ??? ?a++; //編譯錯誤
?? ??? ?int* c= &a; //編譯錯誤,不能取地址,否則就具備了改a的能力
?? ??? ?int b = a; ?//不用強轉(zhuǎn)也可以編譯通過,但還是沒能力改a的值?? ??? ?
}3、修飾引用類型,參數(shù)的值不能被修改, 也就失去了引用類型的效果,但傳遞對象時,可以起到不copy對象的目的。
void test(const int& a)
{
?? ?a = 2; //編譯錯誤,不能修改const引用類型的值
}
void test(const ClassA& a) //傳遞的時候,不需要copy一個新的ClassA,又能保護a
{
?? ?
}二、用const修飾局部或全局變量
功能類似函數(shù)參數(shù)
三、用const修飾函數(shù)返回值
說明函數(shù)的返回類型是const的,功能類似于函數(shù)參數(shù)
const int test()
{
?? ?int a = 1;
?? ?return a;
}四、用const修飾函數(shù)
說明函數(shù)不會修改成員變量的值
class ClassA
{
public:
?? ?int b;
?? ?int test() const
?? ?{
?? ??? ?b = 3; //編譯錯誤,const修飾的函數(shù)不能修改類成員變量的值
?? ??? ?return b;
?? ?}
}以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++實現(xiàn)將數(shù)據(jù)寫入Excel工作表的示例代碼
直觀的界面、出色的計算功能和圖表工具,使Excel成為最流行的個人計算機數(shù)據(jù)處理軟件。在本文中,您將學(xué)習(xí)如何使用?Spire.XLS?for?C++?創(chuàng)建?Excel?文檔,以及如何將數(shù)據(jù)寫入?Excel?工作表2023-03-03
C語言程序中結(jié)構(gòu)體的內(nèi)存對齊詳解
這篇文章主要為大家詳細介紹了C語言程序中結(jié)構(gòu)體的內(nèi)存對齊的相關(guān)資料,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的小伙伴可以了解一下2022-11-11

