按名称将默认/'optional' 参数传递给 C++ 函数

Passing defaulted/'optional' parameters to C++ functions by name

我是 c++ 的新手,正在尝试学习如何在函数中使用可选参数。

现在我知道你可以创建一个带有可选参数的函数,如下所示:

void X_plus_Y(int x=10, y=20) {return x + y;}

int main() {

  X_plus_Y(); // returns 30
  X_plus_Y(20); // set x to 20 so return 40
  X_plus_Y(20, 30); // x=20, y=30: return 50
  return 0;
}

但是我已经在互联网上搜索过,但没有找到任何方法来传递这样的可选参数:

X_plus_Y(y=30); // to set only the y to 30 and return 40

有没有办法或“黑客”来实现这个结果?

命名参数不在该语言中。所以 X_plus_Y(y=30); 没有任何意义。您可以获得的最接近的是以下内容:(适用于 clang 11 和 GCC 10.3)

#include <iostream>

struct Args_f
{
        int x = 1;
        int y = 2;
};

int f(Args_f args)
{
        return args.x + args.y;
}

int main()
{
        std::cout << f({ .x = 1}) << '\n'; // prints 3
        std::cout << f({ .y = 2}) << '\n'; // prints 3
        std::cout << f({ .x = 1, .y = 2 }) << std::endl; // prints 3
}

检查 https://pdimov.github.io/blog/2020/09/07/named-parameters-in-c20/ 以获得深入的解释。