在C ++中,以下函数声明不能重载。
1)仅在返回类型上不同的函数声明。例如,以下程序编译失败:
#include<iostream>
int foo() {
return 10;
}
char foo() {
return 'a';
}
int main()
{
char x = foo();
getchar();
return 0;
}
2)具有相同名称和名称参数类型列表的成员函数声明,如果其中任何一个都是静态成员函数声明,则不能重载。例如,以下程序编译失败:
#include<iostream>
class Test {
static void fun(int i) {}
void fun(int i) {}
};
int main()
{
Test t;
getchar();
return 0;
}
3)仅在指针*与数组[]中不同的参数声明是等效的。即,将数组声明调整为指针声明。在参数类型中,只有第二维和后续数组维才有意义。例如,以下两个函数声明是等效的:
int fun(int *ptr);
int fun(int ptr[]); // redeclaration of fun(int *ptr)
4)仅在一个是函数类型而另一个是指向相同函数类型的指针方面不同的参数声明是等效的。
void h(int ());
void h(int (*)()); // redeclaration of h(i