(一)函数重载
(1)函数的习名原型
函数返回值 函数名 形参列表(参数的类型 和个数 形参名可省略),且不需要函数体。字粉
(2)函数重载条件
- 同一作用域下;
- 函数名相同;
- 函数的习名参数个数不同、参数的字粉类型不同,或者顺序不同;
注意:函数的习名返回值不能作为函数重载的条件;
(二)C为什么不能函数重载,C++却可以?
- C语言区分函数是字粉以函数名来区分(C编译器会在编译阶段将函数命名为_函数名),若是习名使用同名函数,就会发生重定义。字粉
- C++区分函数是习名以函数的原型来区分(C++编译器使用了名字粉碎技术)
(1)vs2019 C编译器编译
#include using namespace std;//使用C编译器//编译成_funextern "C" int Max(int a, int b){ return a >b ? a : b;}int main(){ Max(10, 20); return 0;}
(2)vs2019 C++编译器编译
(三)C++名字粉碎技术
(1) 返回类型不能作为函数重载的依据,
如果返回类型,字粉函数名,习名参数类型都相同,字粉但是习名参数个数不同也未必能够进行重载,如果没有缺 省值或者默认值的字粉情况下可以重载,如果有默认值则不能确定。习名
所以调用的时候无法确定哪个函数因此要注意二义性问题