栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

函数重载的原理

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

函数重载的原理

函数重载
什么是重载?
函数重载就是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,但是返回值不能作为函数重载的条件(因为调用的时候区分不了),常用来处理实现功能类似数据类型不同的问题。

原理:
首先要先知道程序编译的过程
如下:

func,h func.c test.c
1. 预处理 头文件展开 ,宏替换 ,条件编译 ,删去注释
func.i test.i
2.编译 检查语法 , 生成汇编代码
func.s test.s
3.汇编 把汇编代码转化成二进制机器码
func.o test.o
4.链接
a.out

对Func()函数只声明,不定义的报错
这是C语言的命名

这是C++的命名,可以看到比较复杂

1.函数名修饰规则(不同编译器不同,这里是用的gcc和g++)

这里我是在Linux测试出来的
把链接过程后的可执行文件(a.out)进行如下操作
objdump -S a.out
C++: 修饰规则是 _Z + 函数名长度 + 函数名 + 参数首字母
例如_Z 4 Func i
就是Func(int)

**C: 修饰规则就是函数名 **

可以很明显看到有很大差别,由于C是直接用函数名进行标识和查找函数,所以就导致不能重载函数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/929128.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号