提问人:William Pursell 提问时间:11/26/2011 最后编辑:William Pursell 更新时间:11/26/2011 访问量:453
为什么逗号在 C++ 可变参数函数声明中是可选的?
Why is the comma optional in C++ variadic function declarations?
答:
2赞
CB Bailey
11/26/2011
#1
这是推测,但在 C++ 中,有一个没有其他参数的函数是有意义的,例如 而在 C 中,这样的函数没有用处(据我所知),因此必须遵循其他一些参数,因此需要逗号。void f(...)
...
从语法的角度来看,简单地允许并赋予它明显的含义比不允许它更简单,而且它不会给编译器编写者带来太大的负担,也不会给程序员带来任何困惑。void f( int a ... )
(我最初认为这可能与使参数包的语法更规则有关,但我发现在任何情况下,C++03 中都明确允许这样做。
评论
0赞
William Pursell
11/26/2011
如何使用 void f(...)?没有参数名称就无法调用va_start!
2赞
CB Bailey
11/26/2011
@WilliamPursell:它可以“用于”过载解决的回退,例如 SFINAE 情况。
1赞
Tommy Andersen
11/26/2011
在 C 中(至少在 C99 之前)实际上等于 函数定义中的空参数列表意味着函数可以接受“任意”数量的参数,而函数声明中的空参数列表意味着函数不接受任何参数。void f();
void (f...);
0赞
Tommy Andersen
11/26/2011
@CharlesBailey你是对的,我的意思是函数声明中的空参数列表意味着参数的数量是未知的,而函数定义中的空参数列表意味着函数不带参数。
0赞
Keith Thompson
8/27/2012
@TommyA:旧式的函数声明和定义在 C99 和 C11 中仍然是合法的(但“过时”)。但并不等同于 .前者指定一个固定但未知的参数数量和类型;后者(如果它是合法的,没有至少一个显式参数)将允许不同的调用传递不同数量和类型的参数。void f();
void f(...);
评论