其他分享
首页 > 其他分享> > 调用C函数时指定默认参数

调用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