class A{
public:
void foo(int x)
{
cout << "foo with one\n";
}
void foo(int x, int y=10)
{
cout << "foo with two\n";
}
};
int main()
{
A a;
a.foo(1); //error?
}
Run Code Online (Sandbox Code Playgroud)
那么,为什么我不能void foo(int)使用带有默认参数的函数重载?
不能你根据传递的参数的值重载函数,所以也不允许基于default参数值的重载.
您只能在以下基础上重载函数:
const和的资格赛volatile.当然,编译器是否接受重载取决于以下事实:
如果编译器明确地解析了函数的调用.
在你的情况下,编译器无法解决歧义,例如:如果你简单地调用函数,编译器就不会知道调用哪个重载函数:
foo(100);
Run Code Online (Sandbox Code Playgroud)
编译器无法做出决定,因而无法做出错误.