C++ 如何选择传递给函数的默认参数
我这里有一个程序: 我对向函数display()传递参数有疑问C++ 如何选择传递给函数的默认参数,c++,C++,我这里有一个程序: 我对向函数display()传递参数有疑问 void显示(int=20,int=30,int=50); int main() { 显示器(5,12); 返回0; } 无效显示(整数i、整数j、整数k) { cout您不能。默认参数总是在末尾 您所能做的最好的事情如下所示: // Choose a number that is NEVER valid as input to represent default: #define DEFAULT_VAL 0x7fffffff v
void显示(int=20,int=30,int=50);
int main()
{
显示器(5,12);
返回0;
}
无效显示(整数i、整数j、整数k)
{
cout您不能。默认参数总是在末尾
您所能做的最好的事情如下所示:
// Choose a number that is NEVER valid as input to represent default:
#define DEFAULT_VAL 0x7fffffff
void display (int i, int j, int k)
{
if (i == DEFAULT_VAL) i = 20;
if (j == DEFAULT_VAL) i = 30;
if (k == DEFAULT_VAL) i = 50;
cout<<i<<endl;
cout<<j<<endl;
cout<<k<<endl;
}
//选择一个作为输入永远无效的数字来表示默认值:
#定义默认值0x7fffffff
无效显示(整数i、整数j、整数k)
{
如果(i==默认值)i=20;
如果(j==默认值)i=30;
如果(k==默认值)i=50;
遗憾的是,你不能,只有尾随参数可以在C++中使用默认参数。
如果这是一个问题,您可以:
- 重新排列参数
- 编写函数的另一个重载
正如其他人所说,不能在非默认参数之间混合使用默认参数。获得类似行为的一种方法是使用结构传入参数,只设置所需的值。a la:
#include <cstdlib>
#include <iostream>
using namespace std;
struct FnParams
{
int i, j, k;
FnParams() : i(20), j(30), k(40) {};
};
void DoTheThing(FnParams params = FnParams())
{
cout << params.i << endl;
cout << params.j << endl;
cout << params.k << endl;
}
int main()
{
DoTheThing();
FnParams p;
p.j = 42;
DoTheThing(p);
return 0;
}
#包括
#包括
使用名称空间std;
结构FnParams
{
int i,j,k;
FnParams():i(20),j(30),k(40){};
};
void DoTheThing(FnParams params=FnParams())
{
不能请不要使用重载-是的,它可以工作,但它非常混乱。
void display (int i, int j, int k)
{
cout<<i<<endl;
cout<<j<<endl;
cout<<k<<endl;
}
void display (int i, int k)
{
cout<<i<<endl;
cout<<30<<endl;
cout<<k<<endl;
}
#include <cstdlib>
#include <iostream>
using namespace std;
struct FnParams
{
int i, j, k;
FnParams() : i(20), j(30), k(40) {};
};
void DoTheThing(FnParams params = FnParams())
{
cout << params.i << endl;
cout << params.j << endl;
cout << params.k << endl;
}
int main()
{
DoTheThing();
FnParams p;
p.j = 42;
DoTheThing(p);
return 0;
}