通过引用获取可变数量的参数意味着什么?这是否意味着每个参数都通过引用传递?
例如考虑以下函数对其每个参数执行一些处理:
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&amp;,int&amp;,int&amp;),f(int&amp;,int&amp;)的实例化,最后是f(int&amp;)?
如果我将f()的第二个参数更改为“Tail ...”而不是“Tail&amp; ...”怎么样?实例化现在是f(int&amp;,int,int),f(int&amp;,int),最后是f(int&amp;),意味着例如'c'将通过前两个调用复制,最后一个调用将修改副本而不是原始文件?
有人可以指出一个很好的参考资料来解释变量模板的确切运作方式吗?