#include<stdarg.h>voidva_start(va_list ap,last_arg);
参数:
ap va_list 类型,va_start 函数用来初始化ap 变量,它用来存储通过 va_arg 获取额外参数时所必需的信息
last_arg 是最后一个传递给函数已知的固定参数,即省略号之前的参数
作用:
初始化ap变量
调用时机:
在va_arg 和 va_end 之间被调用
//-------------------------------------
type va_arg(va_list ap,type)
参数:
ap va_start 初始化的变量
type 参数列表中元素的类型
作用:
检索函数参数列表中类型为 type 的下一个参数。它无法判断检索到的参数是否是传给函数的最后一个参数。
//-------------------------------------
va_end 清理为ap保留的内存,如果在从函数返回之前没有调用 va_end,则结果为未定义。
//求和intsum(int count,...){
va_list ap;int sum =0;va_start(ap,count);for(int i =0;i<count;++i){
sum +=va_arg(ap,int);}va_end(ap);return sum;}//sum(3,12,2,1); //3 代表参数的个数 ,后面的每一个都是参数//该方法是极不安全的,宏本身无法提供任何安全性保证
c++11 的initializer_list
#include <initializer_list>
using namespace std; // std 命名空间的
int sum(initializer_list<int> ll)
{
int sum = 0;
for(auto p = ll.begin();p!=ll.end();++p)
{
sum += *p;
}
return sum;
}
//调用:
sum({12,2,34,10}); //用{}括住参数
//编译加上 -std=c++11