函数重载解析

                                                           C++函数重载的实现原理

1.函数重载的概念

       在同一个作用域类,一组函数的函数名相同,参数列表不同(参数个数不同/参数类型不同),返回值可同可不同。

2.函数重载的作用

       用来在同一个作用域内,用同一个函数名,命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,增强了程序的可读性。

3.函数重载的原理

  编译器在编译.cpp文件时,会把当前使用的作用域里的同名函数,根据函数形参的类型和顺序会对函数进行重命名(不同的编译器的重命名标准不一样,但是他们都会把文件中同一个函数名进行重命名。)


用下面的代码分析不同编译器下内部不同的命名方式

#include<iostream>
using namespace std;

int Add(int a, int b)
{
	return a + b;
}
double Add(double a, double b)
{
	return a + b;
}

int main()
{
	Add(3, 4);
	Add(5.2, 3.6);
	cout << "Add(3, 4)=" << Add(3, 4) << endl;
	cout << "Add(5.2, 3.6)=" << Add(5.2, 3.6) << endl;
	system("pause");
	return 0;

}

vs编译器

      根据返回值类型(不起决定性作用)+形参类型和顺序(起决定性作用)的规则重命名并记录在.map文件中。

查看方式:“项目”->“属性”->“链接器”->“调试”->“生成映射文件”,选择“是”。然后在当前的项目Debug文件里查看.map文件,结果如下:


      从图中可以看出,虽然两个函数的函数名相同,但是他们在符号表中生成的名称不一样,这样构成函数重载。

‘?’表示名称开始,“@@YA”表示参数表开始,“HHH” “NNN”表示返回值类型,两个参数类型,“@Z”表示名称结束。

Linux g++编译器

根据函数名字的字符数+形参类型和顺序的规则重命名记录在符号表中。

当外面的函数被调用时,便会根据记录的结果去寻找符合要求的函数名,进行调用。

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值