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

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

最佳答案

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

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/

相关文章:

c++ - 处理鼠标拖动的正确方法是什么?

c++ - 模板函数返回模板函数指针

ArrayList 数据类型的 Java 重载

c++ - 默认参数与重载 wrt。姓名查询?

c++ - Swig C++ : Interfacing vector<Class object *>

c++ - C++二维动态数组

visual-studio - VS中如何选择重载方法建议顺序?

c++ - 错误 : default argument given for parameter after previous specification

c++ - 使用函数指针作为模板方法的默认参数时出错

c++ - VS2003 C++ 中不寻常的堆大小限制