这是什么声明`void func(bool b ...)`?

时间:2013-03-27 13:39:31

标签: c++ function

我回答了这个问题How can I get my va_list arguments to repeat itself?并注意到了不常见的函数声明:

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

首先我认为编译器会抱怨,但是clang 3.2没有,g ++ 4.7.2也没有。

此声明扩展到什么?它被解释了什么?

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

5 个答案:

答案 0 :(得分:3)

它与:

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

答案 1 :(得分:3)

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

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

如果是其他参数声明,基本上省略号可以在,之前,但不一定是。功能声明:

void f(int,double...);

真的意味着:

void f(int,double,...);

答案 2 :(得分:2)

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的情况下, “, ...”“...”同义。 < / p>

答案 3 :(得分:1)

三个点(...)称为“椭圆”,表示可变参数列表。因此,您可以传递任意数量的参数(尽管存在操作系统指定的限制)。这样,printf就可以了。例如。

有关详细说明,请参阅here

答案 4 :(得分:1)

我猜你的意思是“......”对吗?

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