C++中如何实现函数任意长参数。。。

额。。这是一篇有点无聊+SB的文章。。神牛可以无视囧。。。
恩。。比如说你在Dp或者XX的时候。。需要一些个数的最大值,
手动比较和用max都很麻烦的话。。可以考虑用这个可变长形参。。
inline int max(int n,…)
{
va_list ap;
va_start(ap,n);
int ret=-inf,i,x;
rep(i,n){x=va_arg(ap,int);if(x>ret)ret=x;}
va_end(ap);
return ret;
}
然后就可以这么调用了。。
max(3,1,9,8);看上去远没有Java的爽囧。。不过凑合凑合吧。。
va_list是一个预先定义的数据结构,用来储存参数列表的。
va_start就是把参数放到va_list里面去,后面还要跟个n表示参数的个数。。
va_arg(ap,int)每次取出下一个参数,还要指定类型。。
最后一个va_end(ap)表示清空这个,回收内存。。。

还有在#define里面也有这样的用法类似的。。
#define rep(i,n) for(i=0;i<n;i++)
#define SC(…) scanf(__VA_ARGS__)
#define PR(…) printf(__VA_ARGS__)
int main()
{
int x;
SC("%d",&x);
PR("%d",x);
}

2 thoughts on “C++中如何实现函数任意长参数。。。

Leave a Reply

Your email address will not be published. Required fields are marked *