按名称将默认/'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/ 以获得深入的解释。
我是 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/ 以获得深入的解释。