一、定义
1.1 C++支持在同一作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同、顺序不同或者类型不同。这样C++函数调用就表现出了多态行为,使用更灵活。C语言是不支持同一作用域中出现同名函数的,这是由于在编译过程中的名字修饰(name Mangling)的不同。
1.2 而不同域出现的同名函数时,一般是不同命名空间里面的同名函数。但是如果同时展开同名函数并使用时,也需要保证这些同名函数的形参不同从而构成重构函数,或者指定展开使用,不然会出现调用歧义。
改正如下:指定命名空间展开
#include<iostream>
using namespace std;
namespace a1 {
void add(int a, double b) {
cout << a + b << endl;
}
}
namespace a2 {
void add(int b, double a) {
cout << a + b << endl;
}
}
using namespace a1;
using namespace a2;
int main() {
int a = 1,b=2;
a1::add(a, b);
a2::add(a, b);
return 0;
}
1.3 返回值不作为评判函数重载的标准
二、使用注意
2.1尽量避免依赖于隐式类型转换来区分不同的函数版本,应该通过参数的明确类型来清晰地定义函数,从而减少潜在的混淆和错误。
2.2满足定义,构成函数重载,但是出现了调用歧义