在c++编程中,有时我们需要编写一些在源代码编写阶段无法确定参数个数,有时甚至无法确定参数类型的函数。
如果想通过一个同名函数实现多个参数相加的 *** 作,我们首先会想到通过函数重载来实现,例如:
int sum(int i1, int i2);
int sum(int i1, int i2, int i3);
...//还可以重载更多类似函数
但如果参数的个数无法确定呢,我们不可能对每一种情况都进行重载。那么,需要的是这样一类函数:它们可以在运行时取任意的实参个数并根据实参的个数自动处理不同实参的情形,或者至少可以在运行时指定任意的实参个数。
可变参数列表
C++允许定义形参个数和类型不确定的函数,不确定的形参可以使用省略号“…”。
以sum函数为例:
int add(int firstParam, … )
使用要求:
1.省略号必须在参数列表的末尾。
2.运行时,才能确认参数的具体个数与类型。
3.只能顺序访问可变参数,无法后退访问
4.无法提供任何安全性保证
如果使用省略号,传递可变数量的参数时使用va_arg、va_start、va_end 和 va_list等宏,定义在中(c中定义在
- va_list是一个列表数据类型,用于定义变量
- va_start(args,paramN) 令对可变函数参数的访问可行。
args:为va_list类型的变量
paramN:为"…"前最后一个参数
将args初始化为指向可变参数列表第一个参数 - va_arg(args,type) 访问下一个可变函数参数。
args:为va_list类型的变量
type:是省略的形参的类型
调用va_arg可以返回传入的实参,并自动更新指向下一个可变参数 - va_end(args) 结束可变参数函数的遍历,释放va_arg变量。
案例
#include
#include
using namespace std;
//求和函数
int add(int firstParam, ...)
{
va_list arg_ptr;
int sum = 0;
int nArgValue;
sum += firstParam;
va_start(arg_ptr, firstParam);
for (nArgValue = va_arg(arg_ptr, int); nArgValue != 0;)
{
sum = sum + nArgValue;
nArgValue = va_arg(arg_ptr, int);
}
va_end(arg_ptr);
return sum;
}
int main()
{
cout << add(1, 2, 3, 0) << endl; //运行结果:6
system("pause");
}
输出结果为:6。
参考:https://blog.csdn.net/qq_41601836/article/details/105753504
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)