C ++重载一个函数默认参数(c++ overloading a function default

2019-10-17 04:52发布

我已经广泛用c保持诸如方法++库:

foo();

我想重载此功能有一个默认参数,例如:

foo(bool verbose=false);

这一变化迫使我重新编译使用此功能,每一个代码? 不能调用foo()没有参数继续工作的无参数的签名没有改变?

顺便说一句 - 我用gcc

谢谢

Answer 1:

这一变化迫使我重新编译使用此功能,每一个代码?

是的,编译就失败了,因为会有歧义。

你可以做的是重载函数如下所示:

foo(bool verbose);

和治疗的情况下foo()如同参数是假的。

这将不需要重新编译。 你只是有两个功能:

foo() { foo(false); } //possibly
foo(bool verbose);

而不是一个具有默认参数中。



Answer 2:

如果你的意思是你想兼得,那么你就不能因为没有办法知道你的意思。

如果你的意思是要替换foo()foo(bool verbose=false)那么这将是一个重新编译,因为调用代码是不是真的调用foo()它调用foo(false)与语法糖隐藏了。

你可以有,虽然:

someType foo(bool verbose)
{
  //real work here.
}
someType foo()
{
  return foo(false);
}

或者,如果无效:

void foo(bool verbose)
{
  //real work here.
}
void foo()
{
  foo(false);
}

但如果你早期的版本foo()已经完全在一个头和可以内联去过,那是另一回事。



文章来源: c++ overloading a function default argument