我有一个广泛使用的 c++ 库,其中包含以下方法:
foo();
我想重载此函数以具有默认参数,例如:
foo(bool verbose=false);
此更改是否会迫使我重新编译使用此函数的每个代码?foo()
由于 no-args-signature 没有改变,没有参数的调用不能继续工作吗?
顺便说一句 - 我正在使用 gcc
谢谢
我有一个广泛使用的 c++ 库,其中包含以下方法:
foo();
我想重载此函数以具有默认参数,例如:
foo(bool verbose=false);
此更改是否会迫使我重新编译使用此函数的每个代码?foo()
由于 no-args-signature 没有改变,没有参数的调用不能继续工作吗?
顺便说一句 - 我正在使用 gcc
谢谢
此更改是否会迫使我重新编译使用此函数的每个代码?
是的,编译会失败,因为会有歧义。
你可以做的是像这样重载函数:
foo(bool verbose);
并将这种情况foo()
视为参数为假。
这不需要重新编译。你只有两个功能:
foo() { foo(false); } //possibly
foo(bool verbose);
而不是一个带有默认参数的。
如果你的意思是你想要两者都有,那么你不能,因为没有办法知道你的意思。
如果您的意思是要替换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()
完全在一个标题中并且可以内联,那是另一回事。