调用C函数时指定默认参数
作者:互联网
假设我有这样的代码:
void f(int a = 0, int b = 0, int c = 0)
{
//...Some Code...
}
正如您可以通过我的代码明显看到的那样,参数a,b和c的默认参数值为0.现在看看下面的主要功能:
int main()
{
//Here are 4 ways of calling the above function:
int a = 2;
int b = 3;
int c = -1;
f(a, b, c);
f(a, b);
f(a);
f();
//note the above parameters could be changed for the other variables
//as well.
}
现在我知道我不能只跳过一个参数,并让它具有默认值,因为该值将作为该位置的参数进行评估.我的意思是,我不能,比如说,f(a,c),因为,c将被评估为b,这是我不想要的,特别是如果c是错误的类型.有没有一种方法让调用函数在C中指定,在任何给定的位置使用函数的任何默认参数值,而不限于从最后一个参数倒退到无?是否有任何保留关键字来实现这一目标,或者至少是解决方法?我可以给出一个例子:
f(a, def, c) //Where def would mean default.
解决方法:
作为解决方法,您可以(ab)使用boost :: optional(直到来自c 17的std :: optional):
void f(boost::optional<int> oa = boost::none,
boost::optional<int> ob = boost::none,
boost::optional<int> oc = boost::none)
{
int a = oa.value_or(0); // Real default value go here
int b = ob.value_or(0); // Real default value go here
int c = oc.value_or(0); // Real default value go here
//...Some Code...
}
然后打电话给它
f(a, boost::none, c);
标签:language-construct,c,c11,default-value 来源: https://codeday.me/bug/20190928/1828846.html