默认参数和可变参数函数

时间:2010-11-09 04:50:25

标签: c++ variadic-functions default-parameters

有没有办法在可变参数函数中指定默认参数?(也适用于模板)

4 个答案:

答案 0 :(得分:8)

在C ++中,您可以使用基于命名参数习惯的函数替换可变参数函数。

请参阅C ++ FAQ项10.20 What is the "Named Parameter Idiom"?

这为您提供了默认功能&方便的记谱法。

干杯&第h。,

答案 1 :(得分:3)

为什么你需要可变参数和默认参数?

例如,

myFunc(int a=5, int b=5, int c=5);

可以使用默认值接收0-3参数,

myFunc(...)

可以显示任意数量的参数。在函数内部,您可以检查缺少的参数并根据需要填写默认值。

答案 2 :(得分:3)

首先是C ++答案。

默认参数是一个参数,您将知道该函数应该和将看到提供的参数。因此,您应该明确地命名这些参数,然后可以提供默认参数。这将是您的功能的“简短”版本。

如果除了这些默认参数之外你想要有一个va_arg参数列表的可能性,只需要使用第二个版本重载你的函数。对于那个“长”版本,你必须无论如何都要提供所有参数,所以在这里有默认参数是没有意义的。

现在是C回答

可能你没有考虑这样的事情,但是使用C99的va_arg 功能,也可以定义default arguments for functions in C。然后宏语法比C ++更宽松,因为你也可以在函数调用的中间省略参数,而不仅仅是在结尾。所以如果你声明你的函数就像

那样
int toto(int a, ...)

并指定位置2和3的默认参数,例如,您可以将其称为

toto(4,5,,,37);

所以从这个意义上来说,C语可以做你要求的。我个人肯定会犹豫不决。

答案 3 :(得分:2)

没有办法做到这一点。