11

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

4

4 回答 4

9

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

请参阅 C++ 常见问题解答项目10.20 什么是“命名参数惯用语”?.

这为您提供了默认功能和方便的符号。

干杯&hth.,

于 2010-11-09T05:01:27.640 回答
3

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

例如,

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

可以接收 0-3 个具有默认值的参数,并且

myFunc(...)

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

于 2010-11-09T05:02:15.940 回答
3

首先是一个 C++ 答案。

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

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

现在是 C 答案

可能您没有研究过这样的事情,但是使用C99的va_arg 宏特性,也可以在 C 中为函数定义默认参数。然后,宏语法比 C++ 更宽松,因为您也可以在函数调用的中间省略参数,而不仅仅是在结尾处。因此,如果您将函数声明为

int toto(int a, ...)

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

toto(4,5,,,37);

因此,从这个意义上讲,在 C 中,可以按照您的要求进行操作。我个人肯定会犹豫这样做。

于 2010-11-09T11:00:57.800 回答
2

不,没有办法做到这一点。

于 2010-11-09T04:53:53.333 回答