c ++重载函数默认参数

时间:2012-08-28 14:02:33

标签: c++ linker overloading

我有一个广泛使用的c ++库,它包含如下方法:

foo();

我想重载此函数以使用默认参数,例如:

foo(bool verbose=false);

这个更改是否迫使我重新编译使用此函数的每个代码? 如果没有参数继续工作,foo()无法调用,因为no-args-signature没有改变?

顺便说一下 - 我正在使用gcc

感谢

2 个答案:

答案 0 :(得分:3)

  

这个更改是否迫使我重新编译使用此函数的每个代码?

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

你能做的就是重载这个功能:

foo(bool verbose);

并将案例foo()视为参数为false。

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

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

而不是默认参数。

答案 1 :(得分:1)

如果你的意思是想要同时拥有两者,那么你就无法知道你的意思。

如果您的意思是要将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()完全处于标题中并且无法理解,那么这是另一回事。