函数重载就是函数名相同,参数列表不同。(与函数返回值类型无关)
//以下前三个函数构成重载,因为函数名相同,参数列表不同 void func(int, double); void func(char); void func(int, int); int func(char);//错误,返回值类型不能构成函数重载
另外,函数重载有可能会出现二义性问题。
#include <iostream> void func(long a); void func(double a); int main(void) { func(10);//二义性,不知道调用哪个 return 0; } void func(long a) { std::cout << "func(int): " << a << std::endl; } void func(double a) { std::cout << "func(double): " << a << std::endl; }
原因是:10这种文字量一般在c++中使用int存储,所以它既可以隐式转换为double也可以隐式转换为long,出现了二义性。
函数重载的真相就是namemangling技术的使用。实际上,编译器在处理重载函数之后,函数名变得不一样了。(比如:上面的函数可能变成了:func0,func1,func2)