关于c ++ 11标准中可变参数模板的混淆

时间:2013-02-24 03:17:23

标签: c++ templates c++11 variadic-templates

这两个功能有什么区别?

template <class ...Types> void f(Types... args...){}
template <class ...Types> void g(Types... args){}

1 个答案:

答案 0 :(得分:7)

f

完全相同
template <class ...Types> void f(Types... args, ...){}
//                                            ^^^^^

即,它只是来自C的一个普通的可变参数列表。由于历史原因,它可以在没有分离参数所需的通常,的情况下使用。与g的区别正是该参数。

请注意,任何参数都不会传递给C风格的可变参数列表,因为C ++风格的可变参数将“吞下”所有参数。