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

Why is the comma optional in C++ variadic function declarations?

本文关键字:声明 c++ 函数 为什么      更新时间:2023-10-16

这两个声明有什么不同吗?

int foo( int a, ... );

int foo( int a ... );

如果没有区别,使第二个在语法上有效的意义是什么?

这是推测,但在c++中可以有一个没有其他参数的函数,例如void f(...),而在C中这样的函数没有用处(我知道),所以...必须跟随其他参数,因此,逗号。

从语法的角度来看,简单地允许void f( int a ... )并赋予它明显的含义比不允许它更简单,它不会给编译器编写者带来太多负担,也不会给程序员带来任何困惑。

(我最初认为这可能与使参数包的语法更规则有关,但我发现它在c++ 03中无论如何都是明确允许的。)