C++中有没有一种方法可以像Python一样按名称传递参数? [重复]

问题描述 投票:0回答:2

C++中有没有一种方法可以像Python一样按名称传递参数? 例如我有一个函数:

void foo(int a, int b = 1, int c = 3, int d = 5);

我可以这样称呼它吗:

foo(5 /* a */, c = 5, d = 8);

或者

foo(5, /* a */, d = 1);
c++ function arguments parameter-passing
2个回答
16
投票

C++ 中没有命名函数参数,但您可以使用 C++20 中的指定初始值设定项达到类似的效果。

获取所有函数参数并将它们放入结构中:

struct S 
{
    int a{}, b{}, c{}, d{};
};

现在修改您的函数以获取该结构的实例(通过

const&
提高效率)

void foo(S s) 
{
    std::cout << s.a << " " << s.b << " " << s.c << " " << s.d;  // for example
}

现在你可以像这样调用该函数:

foo({.a = 2, .c = 3});  // prints 2 0 3 0 
                        // b and d get default values of 0

这是一个演示


4
投票

没有
您必须按顺序传递参数,因此,要为

d
指定一个值,您还必须为
c
指定一个值,因为它是在它之前声明的。

© www.soinside.com 2019 - 2024. All rights reserved.