c+中的默认参数+; 我是C++的新手,我有一个缺省参数的问题。 如果有具有以下原型的函数 void f(int=10,int=20,int=30,int=40)
如果通过向函数传递两个参数来调用此函数,我们如何确保这些参数被视为第一个和第三个参数,而第二个和第四个参数被视为默认值。不可能。他们将被视为前两名 您只需使用不同的名称创建一个函数,使用两个参数并调用c+中的默认参数+; 我是C++的新手,我有一个缺省参数的问题。 如果有具有以下原型的函数 void f(int=10,int=20,int=30,int=40),c++,C++,如果通过向函数传递两个参数来调用此函数,我们如何确保这些参数被视为第一个和第三个参数,而第二个和第四个参数被视为默认值。不可能。他们将被视为前两名 您只需使用不同的名称创建一个函数,使用两个参数并调用f 或者,如果您想模拟命名参数,可以使用类似的方法。例如: #include <iostream> using namespace std; int f_impl(int a,int b, int c, int d){ cout << a << " "
f
或者,如果您想模拟命名参数,可以使用类似的方法。例如:
#include <iostream>
using namespace std;
int f_impl(int a,int b, int c, int d){
cout << a << " " << b << " " << c << " " << d << endl;
return 42;
}
struct f{
int _a, _b, _c, _d;
f() : _a(10), _b(20), _c(30), _d(40){}
f& a(int a){ _a = a; return *this;}
f& b(int b){ _b = b; return *this;}
f& c(int c){ _c = c; return *this;}
f& d(int d){ _d = d; return *this;}
int operator()(){ return f_impl(_a, _b, _c, _d); }
};
#define F(x) (f()x())
int main(){
f().a(100).c(300)();
cout << F(.b(1000).d(4000)) << endl;
return 0;
}
这是不可能的。他们将被视为前两名 您只需使用不同的名称创建一个函数,使用两个参数并调用
f
或者,如果您想模拟命名参数,可以使用类似的方法。例如:
#include <iostream>
using namespace std;
int f_impl(int a,int b, int c, int d){
cout << a << " " << b << " " << c << " " << d << endl;
return 42;
}
struct f{
int _a, _b, _c, _d;
f() : _a(10), _b(20), _c(30), _d(40){}
f& a(int a){ _a = a; return *this;}
f& b(int b){ _b = b; return *this;}
f& c(int c){ _c = c; return *this;}
f& d(int d){ _d = d; return *this;}
int operator()(){ return f_impl(_a, _b, _c, _d); }
};
#define F(x) (f()x())
int main(){
f().a(100).c(300)();
cout << F(.b(1000).d(4000)) << endl;
return 0;
}
<>这不是C++中的默认参数如何工作。如果将两个参数传递给函数
f
,它们将始终作为前两个参数,而后两个参数将是30
和40
<> P> C++函数只支持位置参数。 < P>这不是C++中的默认参数如何工作。如果将两个参数传递给函数
f
,它们将始终作为前两个参数,而后两个参数将是30
和40
换句话说,C++函数只支持位置参数。如果需要,默认参数将从上次分配。p>
如有必要,将从最后一个参数开始分配默认参数
你不能。函数的参数按顺序匹配参数。您可以使用重载代替如下默认参数:
void myFunc(int a,int b,int c,int d);
void myFunc(int a,int c) {
myFunc(a,20,c,40);
}
你不能。函数的参数按顺序匹配参数。您可以使用重载代替如下默认参数:
void myFunc(int a,int b,int c,int d);
void myFunc(int a,int c) {
myFunc(a,20,c,40);
}
正如其他人所说,C++不能这样做。 但是,您可以使用四个初始化为您定义的值的整数成员创建struct/class。然后将其作为参数传递给函数 范例
struct Param
{
int a;
int b;
int c;
int d;
Param() : a(10), b(20), c(30), d(40) {}
void setA(int value) { a = value; }
void setB(int value) { a = value; }
void setC(int value) { a = value; }
void setD(int value) { a = value; }
}
void f(Param& param) {}
Param param;
param.setA(67);
param.setC(9);
f(param);
正如其他人所说,C++不能这样做。 但是,您可以使用四个初始化为您定义的值的整数成员创建struct/class。然后将其作为参数传递给函数 范例
struct Param
{
int a;
int b;
int c;
int d;
Param() : a(10), b(20), c(30), d(40) {}
void setA(int value) { a = value; }
void setB(int value) { a = value; }
void setC(int value) { a = value; }
void setD(int value) { a = value; }
}
void f(Param& param) {}
Param param;
param.setA(67);
param.setC(9);
f(param);
您请求的功能被调用
默认参数和命名参数组合可以让你有更多的选择来做你建议的事情,但不可否认的是,C++没有命名参数。然而,其他一些语言,如C#和VB,可能还有Python,都已经命名了参数,您所要求的特性被称为
默认参数和命名参数组合可以让你有更多的选择来做你建议的事情,但不可否认的是,C++没有命名参数。但是,其他一些语言如C++和VB,以及Python都已经命名为参数
实际上,你可以在C++中用命名帮助来命名参数(在Wiki文章中也提到了命名参数)。(在关于命名参数的wiki文章中也提到了)。…或者您可以向标准委员会申请添加关键字参数。:…或者您可以向标准委员会申请添加关键字参数。:)阅读MSDN文章-阅读MSDN文章-如何确保myFunc(1,2)
调用第二个函数,而不是第一个函数?另外,如果要调用第一个函数,传递前两个参数,该怎么办?如果在void myFunc(int a,int b,int c,int d)的原型中未定义默认值,编译器将选择合适的函数。否则它将给您编译器错误。@Nawaz我没有在任何参数上设置默认参数。如果您想要第一个,请为第二个提供四个或两个参数。@IronMensan:没错。你改变了行为。如果我写myFunc(1,2)
其中的参数是前两个参数,会怎么样?@Nawaz你不能两全其美,有两个参数的myFunc必须有意义,编译器无法读懂你的心思来找出什么。OP要求做一些不能做的事情,我建议做一些可能满足他需要的其他事情。您如何确保myFunc(1,2)
调用第二个函数,而不是第一个?另外,如果要调用第一个函数,传递前两个参数,该怎么办?如果在void myFunc(int a,int b,int c,int d)的原型中未定义默认值,编译器将选择合适的函数。否则它将给您编译器错误。@Nawaz我没有在任何参数上设置默认参数。如果您想要第一个,请为第二个提供四个或两个参数。@IronMensan:没错。你改变了行为。如果我写myFunc(1,2)
其中的参数是前两个参数,会怎么样?@Nawaz你不能两全其美,有两个参数的myFunc必须有意义,编译器无法读懂你的心思来找出什么。OP要求做一些不能做的事情,我建议做一些可能满足他需要的其他事情。