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

3

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

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

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'将通过前两个调用进行复制,并且最后一个调用将修改副本而不是原始内容吗?

有人能指出一个好的参考资料,解释可变模板的工作原理吗?

1个回答

2
我认为您的直觉是正确的,您可以从当前的ISO草案中阅读所有细节(它还没有最终确定),并且您可以使用GCC>4.3进行测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接