C ++ 0x将参数传递给可变参数模板函数

时间:2010-07-16 01:52:59

标签: templates c++11 variadic

通过引用获取可变数量的参数意味着什么?这是否意味着每个参数都通过引用传递?

例如考虑以下函数对其每个参数执行一些处理:

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'将通过前两个调用复制,最后一个调用将修改副本而不是原始文件?

有人可以指出一个很好的参考资料来解释变量模板的确切运作方式吗?

1 个答案:

答案 0 :(得分:2)

我认为你的直觉是正确的,你可以阅读当前draft ISO spec的所有细节(它还没有最终确定),你可以用GCC&gt;来测试它们。 4.3