C++ 可变数目的形参(附传指针操作的对比)

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

一个可行的方法是用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;

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注