C++中不一样的重载是什么

关于什么是重载想必大家都知道,无非就是参数个数不同,参数类型不同可以重载,这里我就不过多介绍啦。
这里想分享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 constconst不知道大家平时有没有关注过这种用法,没关注过可以继续向下看哈。
从上面的输出结果我们也可以看到,const修饰的对象调用的是使用const修饰的方法,非const对象调用的是非const的方法。
然而想必大家都知道对象调用的原理:
看下面的这段代码:
a a;a.func();其实到底层,函数可能会变成这样:
func(a* a);函数是在代码段,对象是在数据段,调用不同对象的函数,其实只不过是同一个函数,传递了不同的数据参数而已。
上面的是把对象的this指针传进去。
再回到上面的代码:
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);}输出如下:
constnon const所以得出结论:
不只是参数类型和个数不同会产生重载,const修饰的参数也会有重载。
但是只有当const修饰的是指针或者引用类型时才可以,普通的int和const int会编译失败的,具体大家可以自己写代码试试。
这里大家也可以想想,问什么一定要指针或者引用类型时重载才可以呢?

联想表明对中国经济的复苏动能以及全球数字经济的前景充满信心
电容为什么会发热,电容发热的原因是什么
市电电源监视电路原理图
Oculus Dash迎更新,VR窗口固定功能更加便捷
Xilinx全新Virtex UltraScale+ FPGA问市,生而为速
C++中不一样的重载是什么
大疆除了无人机 还开发了最新的机器人“小坦克”
变频电机对电压的要求
台积电3纳米工厂将2020年动工2022年量产全球第一座
NVIDIA T4 GPU和TensorRT提高微信搜索速度
蓝牙模组 TR7220B3L 的简单介绍
1-Wire双向电平转换器应用
Zigbee无线协议 和 WiFi通信协议的区别
逐个击破ToF传感器核心元器件,探求其中奥秘
安卓之父怎么样?安卓之父鲁宾的Essential公司要解雇30%员工
小匠物联荣登2023AIoT新维奖·技术突破榜,入选2024中国AIOT产业全景图谱
你真的懂PCIe吗?
中国大陆建成11条AMOLED生产线,OLED产业发展势不可挡
弱密码是什么?有什么用?应用在哪?
扫地机器人也“内卷”? 石头自清洁扫拖机器人G10科技感十足