2

嗨,我有一个困惑或说更多我需要了解一些东西。我有一个过程和另一个相同的重载过程。

    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",是否是正确的方法来处理使用具有默认参数的一个函数删除重载的情况。

我在这里看到了这篇文章,但这似乎专注于编译而不是我的困惑。

4

2 回答 2

3

是的,你可以用一个函数和一个默认参数替换你的重载函数:

string conct (string a, string b, const char* c = "string") {
  // do the processing;
  return concatenated_string;
}
  • 当您重载函数时,编译器会为每个函数生成代码,这可能会导致更大的代码大小。
  • 如果重载只是像您的情况一样充当瘦包装器,那么优化器可能会消除额外的工作。
  • 默认参数设置在调用者的位置,而不是在函数内部,因此默认参数必须是公开可见的,并且更改它们需要重新编译所有调用者。对于像你这样的重载, psuedo-default 参数成为一个隐藏的细节。
于 2013-01-11T19:24:55.740 回答
0

默认值可以在函数原型中使用,但是如果我们想要默认中间参数,那么我们必须将所有值默认到它的右边......另一方面,可以为所有可能的参数组合重载一个函数,也需要默认值不要放在函数调用堆栈上,因此编译器的工作量会减少......

于 2015-06-05T12:13:20.860 回答