一、可变参数列表“...”的使用
1、C语言提供了函数的不定长参数使用
比如 void func(int a, …)。三个省略号,表示了不定长参数。
注意:C标准规定了,函数必须至少有一个明确定义的参数,因此,省略号前面必须有至少一个参数。
2、C++中可变参数模板
// (1)
template<typename... T> void func(T... args){}
// (2)
template<class... T > void func(T... args){}
// T:模板参数包,args:函数参数包
可变参数的个数为0个到多个,如果不想参数为0个,则可以写成:template<typename first, typename... T>
例1:
#include <iostream>
using namespace std;
template<class ... T> void func(T ... args)
{
//sizeof...(sizeof后面有3个小点)计算变参个数
cout << "num = " << sizeof...(args) << endl;
}
int main()
{
func(); // num = 0
func(1); // num = 1
func(2, 1.0); // num = 2
system("pause");
return 0;
}
结果:
num = 0
num = 1
num = 2
例2:参数包的展开
递归方式展开,通过递归函数展开参数包,需要提供一个参数包展开的函数和一个递归终止函数。
(法1)ÿ