函数重载在C++中指的是函数名相同,参数个数不同,参数的类型不同,参数的顺序不同的多个函数构成重载。
Example
int add(int a, int b) { return a + b; } double add(double a,double b) { return a + b; } int add(int a) { return a + 10; } int main(){ double re = add(10.0,11.0); cout << re << endl; return 0; }
注意
1.需要注意的是返回值的类型与函数重载无关。
2. 调用函数时,实参的隐式类型转换可能会产生二义性
void func(int a = 0,int b=0) { } void func(int a) { } int main(){ func(1); //这里无法分辨调用哪个函数 return 0; }
原理
本质上只是编译器的特性,C++编译器默认会对符号名(比如函数名)进行改编、修饰、对重载的函数生成不同的函数名,但是不同的编译器(MSVC,g++)会有不同的规则。这种技术通常叫做name mangling 或者name decoration技术