什么是通过引用传递可变数量参数的含义?这是否意味着每个参数都是通过引用传递的?
例如,考虑以下对其每个参数执行一些处理的函数:
void f() // base case for recursion
{
}
template <typename Head, typename ... Tail>
void f(Head& head, Tail&... tail)
{
// Do processing on head
process(head);
// Now recurse on rest of arguments
f(tail...);
}
现在如果我有以下内容:
int a, b, c;
...
f(a, b, c);
这会导致f(int&, int&, int&)、f(int&, int&)和最后的f(int&)被实例化吗?
如果我将f()的第二个参数改为"Tail..."而不是"Tail&...",那么实例化现在将是f(int&, int, int)、f(int&, int)和最后的f(int&),这意味着例如'c'将通过前两个调用进行复制,并且最后一个调用将修改副本而不是原始内容吗?
有人能指出一个好的参考资料,解释可变模板的工作原理吗?