嗨,我有一个困惑,或者说更多我需要理解一些东西。我有一个程序和另一个相同的重载程序。
string conct (string a, string b) {
string str = conct(a, b, "string");
return str;
}
string conct (string a, string b, const char* c) {
// do the processing;
return concatenated_string;
}
如果我制作c
,而不是有两个重载函数,是否有可能在重载函数中作为默认参数。这样,即使有人只传递两个参数,我也可以只有一个函数来处理这种情况。
但我主要关心的是第三个参数,目前是 const char* c
。所以如果我做到类似 const char* c = "string"
,处理使用带有默认参数的一个函数删除重载的情况是否是正确的方法?
我看到了帖子here但这似乎集中于编译而不是我的困惑。
最佳答案
是的,您可以用一个函数和一个默认参数替换重载函数:
string conct (string a, string b, const char* c = "string") {
// do the processing;
return concatenated_string;
}
- 当您重载函数时,编译器会为每个函数生成代码,可能会导致代码大小变大。
- 如果重载只是充当薄包装器(如您的情况),那么优化器可能会消除额外的工作。
- 默认参数是在调用者的位置设置的,而不是在函数内部设置的,因此默认参数必须是公开可见的,并且更改它们需要重新编译所有调用者。对于像您这样的重载,伪默认参数将成为隐藏的细节。
关于c++ - C++ 中的函数重载与默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14284952/