有没有办法在可变参数函数中指定默认参数?(也适用于模板)
答案 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)
默认参数是一个参数,您将知道该函数应该和将看到提供的参数。因此,您应该明确地命名这些参数,然后可以提供默认参数。这将是您的功能的“简短”版本。
如果除了这些默认参数之外你想要有一个va_arg
参数列表的可能性,只需要使用第二个版本重载你的函数。对于那个“长”版本,你必须无论如何都要提供所有参数,所以在这里有默认参数是没有意义的。
可能你没有考虑这样的事情,但是使用C99的va_arg
宏功能,也可以定义default arguments for functions in C。然后宏语法比C ++更宽松,因为你也可以在函数调用的中间省略参数,而不仅仅是在结尾。所以如果你声明你的函数就像
int toto(int a, ...)
并指定位置2和3的默认参数,例如,您可以将其称为
toto(4,5,,,37);
所以从这个意义上来说,C语可以做你要求的。我个人肯定会犹豫不决。
答案 3 :(得分:2)
没有办法做到这一点。