函数重载 - 两个函数仅由默认参数不同

Alc*_*ott 5 c++ overloading

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)使用带有默认参数的函数重载?

Alo*_*ave 5

不能你根据传递的参数的重载函数,所以也不允许基于default参数值的重载.

您只能在以下基础上重载函数:

  • 参数类型
  • 参数数量
  • 参数序列&
  • const和的资格赛volatile.

当然,编译器是否接受重载取决于以下事实:
如果编译器明确地解析了函数的调用.

在你的情况下,编译器无法解决歧义,例如:如果你简单地调用函数,编译器就不会知道调用哪个重载函数:

 foo(100);
Run Code Online (Sandbox Code Playgroud)

编译器无法做出决定,因而无法做出错误.


Luc*_*ore 3

不,你不能,使用单个参数调用函数时会出现歧义。

如果你需要这样做,那就是代码味道。