[英]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.