我很惊讶以下代码在VS2005中编译时没有任何抱怨,因为在实现中对Bar()的调用使我停下来并想知道如何消除歧义。

class Foo
{
public:
  void Bar(int param = 0);

private:
  void Bar();
};

哪里:
void Foo::Bar(int param)
{
  // do something
  return Bar();
}

谁能启发我?

编辑:

天哪!
立即意识到我的理解上的空白...

我的实际标题是
class Foo : public IFoo
{
public:
  void Bar(int param);

private:
  void Bar();
};

class IFoo
{
public:
  virtual void Bar(int param = 0) = 0;
};

这与我最初发布的内容不同。我以为是。

最佳答案

首先,您需要使用“void Foo::Bar(int paaram)you do not need the return”方法签名。

也可以使用默认参数与argumant一起使用。

因此,调用bar()编译器可以调用(1)或(2),因为它们都同等有效。那么编译器要做什么?它所能做的就是发出一个错误。

class Foo
{
public:
  void Bar(int param = 0); (1)

private:
  void Bar(); (2)
};


void Foo::Bar(int param) (3)
{
  // do something
  Bar();
}

关于c++ - 重载的方法带有可选且无参数:为什么没有歧义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18031479/

10-15 00:22
查看更多