C++函数重载问题

函数的原型 :返回类型+函数名称+参数列表(形参类型和形参的个数)

那么问题来了:为什么C++可以进行函数的重载呢?而C语言却不可以呢?
原因是:
C语言是根据函数名称来区分函数的,如果我们有两个函数名相同的函数,但是返回类型或者参数不同,那么编译器会在编译的时候给函数名前面加上“_”来进行重命名,所以在符号表中生成的函数名是一样的,那么C语言编译器就无法确定是哪个函数。
C++进行名字重命名规则(名字粉碎)。根据函数名,参数列表(包括参数个数以及参数类型)来判断。
在这里插入图片描述
在C++函数重载的时候需要注意以下几点:
1、返回类型不能作为函数重载的依据,
在这里插入图片描述

2、如果返回类型,函数名,参数类型都相同,但是参数个数不同也未必能够进行重载,如果没有缺省值或者默认值的情况下可以重载,如果有默认值则不能确定。
在这里插入图片描述

所以调用的时候无法确定哪个函数,因此要注意上述两种情况所存在的二义性问题

猜你喜欢

转载自blog.csdn.net/m0_54355780/article/details/122892224