有时,无法提前预知一个函数传递的参数个数,如编写一个函数求一个学生的平均分数,但不知道实际运行中到底有几门课程。虽然可以通过数组指针和数组大小来实现这一目的,但假如希望传递的都是课程分数而不包含课程的数目,这就需要定义一个能接收可变数目参数的函数。
一个可行的方法是用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;