繁体   English   中英

c ++重载函数默认参数

[英]c++ overloading a function default argument

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

foo();

我想重载此函数以具有默认参数,例如:

foo(bool verbose=false);

这个改变迫使我重新编译使用这个函数的每个代码吗? 不能调用foo()而没有参数继续工作,因为no-args-signature没有改变?

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

谢谢

这个改变迫使我重新编译使用这个函数的每个代码吗?

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

你可以做的是像这样重载函数:

foo(bool verbose);

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

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

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

而不是一个默认参数。

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

如果你的意思是你想要用foo()替换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()完全处于标题中并且无法使用,那就是另一回事了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM