我怀疑你误解了签名的意思
void fct (int index, int indexes...)
我怀疑你是这么想的fct()
期待一个int
单值(index
)和一个可变列表int
's (indexex...
) 具有 C++11 风格的参数包扩展。
No: 它是一样的 http://en.cppreference.com/w/cpp/language/variadic_arguments
void fct (int index, int indexes, ...)
so two int
单个值和 C 风格的可选参数,您只能通过以下方式使用va_list
stuff.
如果您不相信,请尝试致电fct()
只有一个整数参数
fct(1);
关于可变参数版本,您应该获得“错误:没有匹配函数来调用‘fct’”类型的错误,并带有“注意:候选函数不可行:需要至少 2 个参数,但提供了 1 个参数”类型的注释fct()
.
如果您想接收参数的可变参数列表并递归地将其传递给同一函数,则可以使用模板可变参数方式。
举例来说
template <typename ... Ts>
void fct(int index, Ts ... indexes)
{
std::cout << index << ' ';
fct(indexes...);
}