用于添加默认参数的 C++ 特定语法

标签 c++ function arguments default-value

假设您的代码库中有一个函数 X()。它需要三个参数。原型(prototype)看起来像这样:

在头文件中:

void X(string a, int b, string c);

在 .cpp 文件中:

void myclass::X(string a, int b, string c) {
...
}

假设您正在向代码库中添加内容,并且特别需要传递第四个参数 到 X 只有一个地方。 3 参数调用都需要保留在原位。您希望避免破坏对 X 调用的所有 3 参数版本。

我已经尝试使用建议 here但这不起作用。答案一仍然产生找不到匹配函数的错误。尝试执行 answer 2 suggestions 会产生错误,我无法重载该函数。具体来说,我根据该链接中的答案 2 尝试这样做:

在头文件中:

void X(string a, int b, string c, string d);    
void X(string a, int b, string c, string d="default_value");

非常感谢任何有关如何在不破坏所有 3 参数调用的情况下正确添加单个 4 参数调用的建议 - 谢谢!

最佳答案

只需添加一个新的原型(prototype),保持之前的原型(prototype)不变:

string X(string a, int b, string c);    
string X(string a, int b, string c, string d);

您不能为新参数分配默认值,因为这会导致歧义:编译器不可能知道您要调用哪个方法。

或者您可以用一个新的定义替换旧的定义,采用一个额外的参数,并为其设置一个默认值。但在这种情况下,您必须删除之前的函数声明。

提示:

根据你的语法,我认为你正在使用

using namespace std;

在你的标题中。这是不好的做法。这样做会在您包含此 header 的任何地方使用 std 命名空间填充全局命名空间。您应该删除此指令并限定您的类型:std::string 而不是 string

关于用于添加默认参数的 C++ 特定语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8496113/

相关文章:

c++ - 如何同步两个RichEdit的滚动位置?

javascript - 如何避免 map 函数中的变量范围问题?

vb6 - VB 6 中的 Command$ 和 Command 有什么区别?

c - 引用用户传递的参数的单个字符

c++ - 这个可变参数模板代码有什么作用?

c++ - boost rtree.bounds() : getting more boxes and/or accessing to its structure

c++ - 在 C++ 中使用 Doxygen 和 GraphViz 的错误调用/调用者图

PHP 邮件 HTML 格式不起作用

c++ - 使用结构变量作为形式参数

javascript - 如何将内插值作为参数传递给angularjs中的javascript函数