C++支持函数重载的原理

1.原理:名字修饰

C++之所以支持函数重载是因为C++引入了名字修饰,即将名字相同,但功能略有不同的函数,按照一定的规则改个名字。这种改名字,在我们的.cpp文件不会体现出来,而是在代码经过c++编译器编译后,生成的中间文件里,当我们调用这个函数时,这个函数和它的同名函数会按照一定的规则,被改名字,然后以改的名字来调用。

2.vs中函数重载的名字修饰

如下:

在上面我们调用了,定义了两个同名函数Add,我们通过查看编译后的中间文件的反汇编,我们发现两次调用Add,反汇编调用的函数名都是Add

但是我们注意到这两个Add的地址不同,所以这俩Add不是同一个函数,只是vs的反汇编显示了同一个名字,可能是便于我们看反汇编指令,但是在vs调用这两个同名函数是遵守名字修饰的。

我们可以把它修饰后的名字骗出来

我们在上面把函数的定义代码屏蔽掉,然后我们只声明函数,那么编译器在预处理,编译,汇编时都能顺利通过,但是最后一步的链接会报错,因为编译器找不到我们事先声明函数的定义,所以报错,通过报错,我们可以看出,编译器在处理同名函数时,用了名字修饰。

综上所述,C++编译器在遇到正确定义的同名函数时,会函数重载,函数重载的原理是名字修饰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值