C语言不支持同名函数,而C++支持
C++支持的这一操作叫函数重载
函数重载的要求:
函数名可以相同
但参数必须不同,参数的个数/类型/顺序不同
上图就是属于类型不同
顺序不同
类型不同
个数不同
返回值不同,但传的参数相同,不构成函数重载
这种情况下编译就会报错,函数传过去的参数万一两个都是int型的,那它调用的是哪个函数就不明确,所以函数重载重点是在类型上。
函数重载有什么用呢?首先在C语言中,实现一个功能,对于传参是不同的类型,可能要写多个函数,且这些函数名不能相同,这样每次调用就很麻烦,以Swap()交换函数为例,Swap1(int a,int b),
Swap2(int a,double b)等就要写出多个swapxxx()的函数,且每次调用可能还记不住用哪个swapxxx函数。为了解决这个问题就在CPP中出现了函数重载。同一个功能的实现可以用同一个函数名。
函数在C++的编译状态下,转为汇编代码会变成这样的命名形式,以此图为列
在编译阶段转为汇编会变成
_z是编译器自带的翻译的,后面的2是函数名的长度,pf是函数名,i和 d分别是变量类型的首字母。
所以在重载函数中,参数是重点,参数必须不同,编辑器就是根据以上原理来判断,并在链接时如何调用哪个函数。
如图。
而在C语言中,则是直接转汇编用的函数名,并没有函数重载这一方法,编译器难以判断如何调用,所以在C++引入并支持重载函数。
如图
这是C语言编译时转为汇编代码时直接用的函数名,无参数参与转汇编



