C++中函数重载原理

1.C++中,关于一组函数重载,必须有以下几点必要条件:

(1)函数名相同

(2)形参列表不同(形参个数、形参类型)

(3)函数声明在同一作用域中 

2.关于重载原理简述:C语言中函数符号与对应的函数名一致,而C++中为了支持函数重载,编译器会对此做一些处理,因此我们不必担心会有命名冲突的担忧。C++实现函数重载

的技术手段是函数符号的改名,符号名是在对应的函数名上改编得到的,因此我们可以通过分析编译器处理后的改名机制来验证函数重载的规则。

3.探讨编译器处理后的函数符号名:

例如:分别计算两个整型、浮点型数的和运算

int add(int a, int b)
{
	return a+b;
}
double add(double a, double b)
{
	return a+b;
}
在windows下,打开VS,项目,属性,链接器,调试,映射导出(是),然后再在对应文档里面找到.map文件,寻到add函数,即可找到被编译的函数符号名 :


由以上可得,除了固定格式相同意外,两个函数的参数列表不同,导致HHH,NNN作为区分两个函数的指标

同样,使用相同的例子,我们再linux环境下,使用工具 objdump,查看文件,来验证函数符号名的转换:


由以上可得,类似的,除了固定格式一样,由于形参列表不同,导致dd,ii作为区分两个函数的标志

4.学习了C++中函数重载,我们顺便谈一下C++的文件中,要使用C文件,外加的extern "C"声明的原因

C++支持函数重载,而C不支持函数重载,函数被C与C++编译器编译之后的符号名 不同,加上extern "C"声明,表面这是一条被C编译器处理过得函数,按照C编译风格来解

析,即解决函数名字匹配问题。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值