变长参数的函数定义
2009-05-02 13:47
176 查看
变长参数函数定义由C标准库stdarg.h支持。我们以求和函数为例:
由于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);用来复制一个参数列表,因为每一个参数列表用一次就完了,因此如果想多次使用的话,必须在参数列表使用前复制一个。
#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);用来复制一个参数列表,因为每一个参数列表用一次就完了,因此如果想多次使用的话,必须在参数列表使用前复制一个。
相关文章推荐
- JavaScript 可变长度参数函数的定义
- 用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数
- Python进阶(二十四)-Python中函数的参数定义和可变参数
- 重学C++ 002定义带参数的成员函数
- C++中函数中参数和返回值都是用户定义类型(这里主要是类的情况时的分析)
- 3、定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。
- 关于作为函数参数的多维数组的声明、定义和调用
- 继承的虚函数缺省参数值不要重新定义的原因
- 信息函数GetSystemMetrics函数参数nIndex的定义
- C语言:函数声明与定义的参数不一致问题,后果可能很严重哦!!!!!
- php定义一个参数带有默认值的函数实例分析
- JavaScript新手的第一堂函数课:定义与参数(文末福利)
- Swift 定义函数 参数 返回值
- 函数的默认参数重复定义问题
- 对象作为函数参数、类外定义成员函数
- Python 函数的参数定义和可变参数
- C++ Primer 学习笔记_21_函数 --函数定义、参数传递
- Python函数可变参数定义及其参数传递方式详解
- Python中函数的参数定义和可变参数
- C语言定义可变参数列表的函数