有时,无法提前预知一个函数传递的参数个数,如编写一个函数求一个学生的平均分数,但不知道实际运行中到底有几门课程。虽然可以通过数组指针和数组大小来实现这一目的,但假如希望传递的都是课程分数而不包含课程的数目,这就需要定义一个能接收可变数目参数的函数。
一个可行的方法是用C++标准库的std::initializer_list<T>类型定义函数的形参。
double average(std::initializer_listscores)
{
auto n = 0;
double all = 0;
for (auto score : scores)
{
all += score;
n++;
}
if (n > 0)
return all / n;
return 0;
}
cout << average({ 5,6 }) << endl;
cout << average({ 5,60,49 }) << endl;

用普通传指针的方式,就如下操作:
double average(int scores[],int n)
{
double all = 0;
for (int i=0;i<n;i++)
{
all += scores[i];
}
if (n > 0)
return all / n;
return 0;
}
int arr[2] = { 5,6 };
int arr1[3] = { 5,60,49 };
cout << average(arr,2) << endl;
cout << average(arr1,3) << endl;
