您的位置:首页 > 其它

变长参数的函数定义

2009-05-02 13:47 176 查看
变长参数函数定义由C标准库stdarg.h支持。我们以求和函数为例:

#include <cstdarg>
#include <iostream>
using std::cout;
using std::endl;
template<typename T>
T sum(int counts, T data1, ...) {
T sum=0;
va_list ap;
va_start(ap, counts);
for(int i=0; i<counts; ++i) {
sum+=va_arg(ap, T);
}
va_end(ap);
return sum;
}
int main() {
cout<<sum(3, 16.0, 34.6, 454.7)<<endl;
cout<<sum(2, 123, 345)<<endl;
return EXIT_SUCCESS;
}


由于C中没有引用类型,因此变长参数不能是引用。va_list ap;定义一个参数列表;va_start(ap, counts);表示将counts变量的下一个参数作为参数列表ap的开始参数;va_arg(ap, T);表示从参数列表ap中取出一个类型为T的参数;va_end(ap);表示释放参数列表ap;stdarg.h中还有一个成员void va_copy(va_list dest, va_list src);用来复制一个参数列表,因为每一个参数列表用一次就完了,因此如果想多次使用的话,必须在参数列表使用前复制一个。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  list c