函数重载的原理

函数重载简介

不能重载的运算符:点号. 三目运算?: 作用域访问符:: 运算符sizeof 以及. *

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

原理:

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

a.h/a.cpp/test.cpp
生成a.i,test.i文件
生成a.s,test.s文件
生成a.o,test.o文件
预处理:删除注释,宏替换,头文件展开,条件编译
编译:检查语法,生成汇编代码
汇编:把汇编代码转化成机器码
链接将多个.o文件合并形成文件a.out

以下是对Func()函数只声明,不定义的报错
可以看到不同语言的命名风格不同

这是C语言的命名
在这里插入图片描述
这是C++的命名,可以看到比较复杂
在这里插入图片描述

函数名修饰规则(不同编译器不同,这里是用的gccg++,以下结果皆是Linux测试出来的)

我们把链接过程后的可执行文件(a.out)进行如下操作

objdump -S a.out

该段命令可以查看目标文件的详尽信息

C++: 修饰规则是 _Z + 函数名长度 + 函数名 + 参数首字母

例如_Z 4 Func i 就是Func(int)

在这里插入图片描述

C: 修饰规则就是函数名

在这里插入图片描述
可以很明显看到有很大差别,由于C是直接用函数名进行标识和查找函数,所以就导致不能重载函数。
而C++对函数名长度,函数名,参数都进行了区分。所以重载起来就可以找到对应的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eptcup_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值