Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有不同参数的相同函数_C++ - Fatal编程技术网

C++ 具有不同参数的相同函数

C++ 具有不同参数的相同函数,c++,C++,我需要写一个求和函数来添加参数。问题是我需要编写一个函数,但我需要使用不同的参数调用。这里有一个例子 sum2,5->7 sum3,5,10->18 有没有一个功能可以实现这一点?是的!使用C++11,您可以生成一个可变函数。这是代码 int sum(int n, ...){ va_list list; va_start(list ,n); int x; int s=0; for(int i=0; i<n; i++){ x = va_ar

我需要写一个求和函数来添加参数。问题是我需要编写一个函数,但我需要使用不同的参数调用。这里有一个例子

sum2,5->7

sum3,5,10->18


有没有一个功能可以实现这一点?

是的!使用C++11,您可以生成一个可变函数。这是代码

int sum(int n, ...){

   va_list list;
   va_start(list ,n);

   int x;

   int s=0;

   for(int i=0; i<n; i++){
       x = va_arg(list,int);
       s+=x;
   }

 return s;
}
大体上,您可以调用sum2、2、5

第一个参数是您拥有的参数数


此外,您还可以调用sum3、3、5、10,它们将返回18。

sumint n_1=0、int n_2=0、int n_3=0
您可以调用一个、两个或三个参数,也可以使用向量或一组数字,并将该对象传递给函数。然后执行该操作并返回您的总和

在C++11及更高版本中,您可以使用:

整素数值{ 返回值; } 样板 int sumint值,目标。。。法格斯{ 返回值+sumFargs。。。; } sum2,5; sum3,5,10; 在C++17及更高版本中,可以使用折叠表达式删除递归:

样板 国际sumTargs。。。法格斯{ 返回法格斯+。。。; } 或者,在C++11及更高版本中,可以使用std::initializer\u list:

包括 int sumstd::初始值设定项\列表值{ int结果=0; 对于int值:值{ 结果+=数值; } 返回结果; } 和{2,5}; 和{3,5,10}; 然后使用以移除手动回路:

包括 包括 int sumstd::初始值设定项\列表值{ 返回std::acgregateValues.begin,values.end,0; } 如果出于某种原因,您没有使用C++11编译器,则可以使用数组:

样板 int sumint和value[N]{ int结果=0; 对于int i=0;i

可变参数,如果需要3个以上的数字?这种方法非常简单。这种解决方案适用于更多类型参数和1-5个数字参数,如果相同类型和超过5个数字,则可以使用数组。虽然人们可以整天争论“VA”参数/宏,但可变模板解决了不同的问题,这段代码是C++11之前处理这个问题的方法。C++11的方法是使用。在C++17中,可以使用a来进一步优化实现。这将起作用,但您可以用任何东西调用它,并且您可以在运行时完全撒谎,以发现有趣的未检查错误。例如,int x=sum4400000000,绿色鸡蛋和火腿,42,3.1459;`将编译。结果会很滑稽。更有理由使用可变模板,这样参数的类型就可以被锁定,所以如果传入不兼容的值,就会发生编译器错误