现代 C++ 中有命名参数吗?[复制]

Is there named parameters in modern C++? [duplicate]

提问人:ProMike 提问时间:9/29/2023 最后编辑:Jan SchultkeProMike 更新时间:9/29/2023 访问量:132

问:

在 C# 和 Python 等一些语言中,有一个“命名参数”的概念。在一本关于 C# 的书中,我找到了代码:

static void print_nums(int x = 0, int y = 0, int z = 0)
{
    Console.WriteLine(x, y, z);
}

然后可以像这样调用函数

print_nums(y: 3);

C++ 中有类似的东西吗?我见过一些这样的问题,但它们大约有 7-8 年的历史,所以也许在较新版本的 C++ 中添加了语法?我还看到这种类型的功能可以手动实现,但我的问题是关于标准的。

C++ 命名参数

评论

0赞 Silvio Mayolo 9/29/2023
这是 2014 年关于此功能的提案。当时被拒绝了。

答:

2赞 Ted Lyngmo 9/29/2023 #1

算是吧。从 C++20 开始,您可以使用指定的初始值设定项来达到类似的效果:

struct params {
    int x;
    int y;
    int z;
};

void func(params p) {
}

int main() {
    func({.y = 3});                   // p.x and p.z will be 0, p.y = 3
    func({.x = 3, .y = 10, .z = 2});  // here all are initialized to resp. Value
}

请注意,您需要按照指定成员在 中出现的顺序命名它们。params