首页 > 解决方案 > 在函数 C++ 中间使用默认值

问题描述

假设这段代码:

#include<stdio.h>    

int t(int a, int b=6, int c=7){
 return b;
}

int main(){    
  
  return 0;  
} 

如何调用t并仅传递a and c值并将b其作为默认值?

标签: c++

解决方案


没有办法做到这一点。参数只能按顺序传递,因此不能将默认参数用于显式传递的另一个参数之前的参数。

但是,您可以使用聚合类作为参数,它与默认成员初始化器和指定初始化器 (C++20) 相结合是命名参数传递的一个不错的模拟:

struct Args {
    int a;
    int b = 6
    int c = 7;
};

int t(const Args& args);

int main()
{
    t({
        .a = 42,
        // b will be 6
        .c = 1337,
    });
}

使用指定的初始化程序不是强制性的,因此不需要 C++20。它只是更简洁和可读。

t根据程序的结构,成为类的成员函数可能是有意义的。


推荐阅读