函数重载VS在C默认参数++(function overloading vs default arg

2019-07-18 02:50发布

嗨,我有一个困惑或者说更多,我需要了解的东西。 我有一个程序和相同的另一超负荷过程。

    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" ,会是处理去除与缺省参数一个函数重载的情况下,正确的方法。

我看到后在这里 ,但似乎把重点放在编制,而不是混乱,我有。

Answer 1:

是的,你可以用一个功能,默认参数取代你的重载函数:

string conct (string a, string b, const char* c = "string") {
  // do the processing;
  return concatenated_string;
}
  • 当重载函数的编译器对每个函数生成的代码,可能导致较大的代码大小。
  • 如果过载只是作为一个瘦包装作为你的情况,则优化可以消除额外的工作。
  • 默认参数被置为呼叫者的位置,而不是里面的功能,所以默认参数必须是公开可见的,并改变它们需要重新编译所有来电。 像你这样的过载的伪默认参数成为一个隐藏的细节。


Answer 2:

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



文章来源: function overloading vs default argument in c++