为什么逗号在C ++可变参数函数声明中是可选的?

时间:2011-11-25 21:54:49

标签: c++ syntax

这两个声明有区别吗?

int foo( int a, ... );

int foo( int a ... );

如果没有区别,那么第二个句法上有效的是什么?

1 个答案:

答案 0 :(得分:2)

这是推测,但在C ++中,有一个没有其他参数的函数是有意义的,例如void f(...)而在C中,这样的函数没有用(我知道),因此...必须遵循其他参数,因此,逗号。

从语法的角度来看,简单地允许void f( int a ... )并赋予它明显的意义比禁止它更简单,它不会给编译器编写者造成太大负担或者对程序员造成任何混淆

(我原本以为这可能与使参数包的语法更加规则有关,但我发现它在任何情况下都在C ++ 03中明确允许。)