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

A confusion about variadic templates in c++11 standard

本文关键字:c++11 标准 关于      更新时间:2023-10-16

这两个函数之间有什么区别?

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

f与完全相同

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

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

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