關(guān)于什么是重載想必大家都知道,無非就是參數(shù)個數(shù)不同,參數(shù)類型不同可以重載,這里我就不過多介紹啦。
這里想分享C++中一個不一樣的重載,即const重載。
可以看下面的代碼:
struct A {
int count() {
std::cout << "non const" << std::endl;
return 1;
}
int count() const {
std::cout << "const" << std::endl;
return 1;
}
};
int main() {
A a;
a.count();
const A b;
b.count();
}
這段代碼會輸出什么?
?
?
?
?
?
輸出的是這樣:
non const
const
不知道大家平時有沒有關(guān)注過這種用法,沒關(guān)注過可以繼續(xù)向下看哈。

從上面的輸出結(jié)果我們也可以看到,const修飾的對象調(diào)用的是使用const修飾的方法,非const對象調(diào)用的是非const的方法。
然而想必大家都知道對象調(diào)用的原理:
看下面的這段代碼:
A a;
a.func();
其實(shí)到底層,函數(shù)可能會變成這樣:
func(A* a);
函數(shù)是在代碼段,對象是在數(shù)據(jù)段,調(diào)用不同對象的函數(shù),其實(shí)只不過是同一個函數(shù),傳遞了不同的數(shù)據(jù)參數(shù)而已。
上面的是把對象的this指針傳進(jìn)去。
再回到上面的代碼:
struct A {
int count() {
std::cout << "non const" << std::endl;
return 1;
}
int count() const {
std::cout << "const" << std::endl;
return 1;
}
};
可以理解為:
int count(A *);
int count(const A*);
咦,這不就是重載嗎,難道還有const重載?
還真有,看下這段代碼:
struct A {
int count(const int& s) {
std::cout << "const" << std::endl;
return 1;
}
int count(int& s) {
std::cout << "non const" << std::endl;
return 1;
}
};
int main() {
A a;
a.count(4);
int c = 5;
a.count(c);
}
輸出如下:
const
non const
所以得出結(jié)論:
不只是參數(shù)類型和個數(shù)不同會產(chǎn)生重載,const修飾的參數(shù)也會有重載。
但是只有當(dāng)const修飾的是指針或者引用類型時才可以,普通的int和const int會編譯失敗的,具體大家可以自己寫代碼試試。
這里大家也可以想想,問什么一定要指針或者引用類型時重載才可以呢?
-
C++
+關(guān)注
關(guān)注
22文章
2120瀏覽量
76628 -
CONST
+關(guān)注
關(guān)注
0文章
45瀏覽量
8658 -
重載
+關(guān)注
關(guān)注
0文章
8瀏覽量
2899
發(fā)布評論請先 登錄
數(shù)據(jù)類型不一樣和接口 怎么解決
一樣的c文件但keil的輸出文件不一樣
程序編輯器結(jié)果不一樣
為什么c語言中a和b的值不一樣,c和d的值不一樣?
請問C++ primer和C++primer plus這兩本書有什么不一樣?
c++和c語言之間有什么區(qū)別
C++中函數(shù)重載的使用
電容容量一樣大小不一樣能用嗎
電容容量一樣大小不一樣能用嗎?
不同芯片的DMA(Direct Memory Access)是不一樣的
不一樣的展會,不一樣的精彩:2025灣芯展順利收官
不一樣的展會,不一樣的精彩 2025灣芯展圓滿收官

C++中不一樣的重載是什么
評論