函数重载与c ++中的默认参数

时间:2013-01-11 19:03:59

标签: c++ overloading default-arguments

你好我有困惑或者说我需要了解更多。我有一个程序和另一个重载程序相同。

    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,但这似乎集中在编译而不是我的困惑。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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