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

Wil*_*ell 8 c++ syntax

这两个声明有区别吗?

int foo( int a, ... );
Run Code Online (Sandbox Code Playgroud)

int foo( int a ... );
Run Code Online (Sandbox Code Playgroud)

如果没有差异,那么使第二个语法有效的重点是什么?

CB *_*ley 2

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

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

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

  • @WilliamPursell:它可以“用于”在例如 SFINAE 情况下进行重载解析的后备。 (2认同)