函数重载简介
不能重载的运算符:点号.
三目运算?:
作用域访问符::
运算符sizeof
以及.
*
。
什么是重载?
函数重载就是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,但是返回值不能作为函数重载的条件(因为调用的时候区分不了),常用来处理实现功能类似数据类型不同的问题。
原理:
首先要先知道程序编译的过程
如下:
以下是对
Func()
函数只声明,不定义的报错
可以看到不同语言的命名风格不同
这是C语言的命名
这是C++的命名,可以看到比较复杂
函数名修饰规则(不同编译器不同,这里是用的gcc
和g++
,以下结果皆是Linux
测试出来的)
我们把链接过程后的可执行文件(a.out
)进行如下操作
objdump -S a.out
该段命令可以查看目标文件的详尽信息
C++: 修饰规则是 _Z + 函数名长度 + 函数名 + 参数首字母
例如
_Z 4 Func i
就是Func(int)
C: 修饰规则就是函数名
可以很明显看到有很大差别,由于C是直接用函数名进行标识和查找函数,所以就导致不能重载函数。
而C++对函数名长度,函数名,参数都进行了区分。所以重载起来就可以找到对应的函数。