C++允许定义形参个数和类型不确定的函数,不确定的形参可以使用省略号“…”
int add(int firstParam, … )
使用要求:
- 省略号必须在参数列表的末尾。
- 运行时,才能确认参数的具体个数与类型。
- 只能顺序访问可变参数,无法后退访问
- 无法提供任何安全性保证
如果使用省略号,传递可变数量的参数时使用va_arg、va_start、va_end 和 va_list等宏,定义在<cstdarg>中(c中定义在<stdarg.h>)。
(1)va_list是一个列表数据类型,用于定义变量
(2)va_start(args,paramN) 令对可变函数参数的访问可行。
- 第一个参数为va_list类型的变量
- 第二个参数为"..."前最后一个参数
- 将args初始化为指向可变参数列表第一个参数
(3)va_arg(args,type) 访问下一个可变函数参数。
- 第一个参数为va_list类型的变量
- 第二个参数是省略的形参的类型
- 调用va_arg可以返回传入的实参,并自动更新指向下一个可变参数
(4)va_end(args) 结束可变参数函数的遍历。
#include<iostream>
#include<cstdarg>
using namespace std;
//求和函数
int add(int firstParam, ...)
{
va_list arg_ptr;
int sum = 0;
int nArgValue;
sum += firstParam;
va_start(arg_ptr, firstParam);
do
{
nArgValue = va_arg(arg_ptr, int);
sum += nArgValue;
} while (nArgValue != 0);
va_end(arg_ptr);
return sum;
}
int main()
{
cout << add(1, 2, 3, 0) << endl; //运行结果:6
system("pause");
}
######################################
Variadic 宏是参数个数可变的宏,省略号可以被指定为正式自变量,并且替换标识符 __VA_ARGS__
#include<stdio.h>
#include<stdarg.h>
#define LOGSTRINGS(fm,...) printf(fm,__VA_ARGS__)
int main()
{
LOGSTRINGS("hello,%d",10); //输出:hello,10
return 0;
}
转载链接:
https://www.baidu.com/link?url=a_IIy88T7_TpbrnsgL_0wZVFFgFgZVCRkM6idJIAozVkymH5cv2cUzmBNBuC3BQVCvqHBY25gnY7Ahu6UVTVPkuM54sosMPTX3namcHeNdO&wd=&eqid=d0b1dc650000b699000000065ea4048c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)