用于添加默认参数的c++特定语法
C++ specific syntax for adding default argument
假设您的代码库中有一个函数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函数的最后一个参数有一个默认值
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 使用基类指针调用基类的值构造函数的语法是什么?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++语法运算符功能?
- C++使用 rand 定义函数语法
- 什么文件可以修改 atom 的C++语法?
- 创建模板嵌套类实例的语法?
- C++语法差异:二维和一维数组(指针算术)
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么