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

C++ specific syntax for adding default argument

本文关键字:语法 c++ 添加 默认 参数 用于      更新时间:2023-10-16

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

头文件:

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

在。cpp文件中:

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

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

我已经尝试使用这里的建议,但这不起作用。答案一仍然产生没有找到匹配函数的错误。尝试做什么回答2建议产生错误,我不能重载函数。具体来说,我尝试这样做,基于链接中的答案2:

头文件:

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

任何关于如何正确添加单个4参数调用而不破坏所有3参数调用的建议都是非常感激的-谢谢!

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

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

你不能给新实参赋一个默认值,因为那样会导致歧义:编译器不可能知道你想调用哪个方法。

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

提示:

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

using namespace std;
标题中的

。这是不好的做法。这样做是用std命名空间填充全局命名空间,无论您在哪里包含这个头。您应该删除此指令,而不是限定您的类型:std::string而不是string

在头文件中你需要有两个函数

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

这样,所有使用三个参数调用X的代码段都不会中断,并且调用使用四个参数调用X的单个地方(即调用适当的重载函数)。

您只需要头文件中的第二个定义。这两个参数同时存在会导致重载错误。

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

表示,当给出4个值时,使用提供的d,当只给出3个值时,将d设置为"default_value"。

此示例以最大警告级别编译:

#include <iostream>
#include <string>
void foo(std::string , int , std::string , std::string d="default_value")
{
    std::cout<<"d="<<d<<std::endl;
}

int main() {
    foo("param1",55,"param2");
}

foo函数的最后一个参数有一个默认值