这声明了什么“void func(bool b..)”



我回答了这个问题如何让我的va_list参数重复?并注意到不常见的函数声明:

void ordered(int num1, double list ...);

起初我以为编译器会抱怨,但clang 3.2没有,g++4.7.2也没有。

这份声明扩展到了什么?它被解释为什么?

编辑:我知道省略号。但是正常形式是<return type> <function-name>(<argument1-type> <arg-name>, ...);,在这个例子中缺少逗号。

它与相同

void ordered(int num1, double list, ...);

这是C++标准中的语法片段:

parameter-declaration-clause:
  parameter-declaration-list[opt] ...[opt]
  parameter-declaration-list , ...

基本上,如果是其他参数声明,省略号前面可以加,,但不必加

void f(int,double...);

真正的意思是:

void f(int,double,...);
void ordered(int num1, double list ...);

与相同

void ordered(int num1, double list, ...);

参考:
标准C++11 8.3.5.3/4:

parameter-declaration-clause:
parameter-declaration-listopt ...opt
parameter-declaration-list , ...

如果parameter-declaration-clause以省略号或函数参数包(14.5.3(终止,则参数数量应等于或大于没有默认参数且不是函数参数包的参数数量。在语法正确且“...”不是abstract-declarator的一部分的情况下,“, ...”“...”同义

三个点(...(被称为"省略号",表示变量参数列表。因此,您可以传递任意多的参数(不过,有一个操作系统指定的限制(。例如,printf就是这样工作的。

请参阅此处以获得进一步的解释。

我猜你的意思是"…"对吧?

对于某些函数,无法指定调用中预期的所有参数的数量和类型。这样的函数是通过用省略号(…(终止参数声明列表来声明的。

相关内容

最新更新