C++实现可变参数列表
// 接收数量不定的实参.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <cstdarg> using namespace std; int sum(int count , ... ) ; int _tmain(int argc, _TCHAR* argv[]) { cout << sum(5,4,6,8,10,12) <<endl; cout << sum(8,22,33,44,55,66,77,88,99) <<endl; return 0; } int sum( int count , ... ) { if ( count <= 0) { return 0 ; } //为了实现可变参数列表,首先需要声明一个va_list类型的指针 //va_list类型是在cstdarg头文件里面定义的,该指针用来依次 //指向各个参数 //va_start是一个宏,用来初始化arg_ptr,使其指向列表的第一个 //参数,这个宏的第二个参数是sum函数参数列表省略号前得固定参 //数的名称,用来确定第一个参数的位置 va_list arg_ptr ; va_start(arg_ptr , count) ; int CountSum = 0 ; //va_arg是一个宏,返回arg_ptr指向的 //参数位置,并使arg_ptr递增来指向下 //一个参数值 //va_arg宏的第二个参数是需要统计的第 //一个参数的类型,如果类型不正确, //程序也可能会执行,但得到的是无用的 //数据,arg_ptr将被错误地递增 for (int i = 0 ; i < count ; ++ i) { CountSum += va_arg(arg_ptr , int) ; } //将va_list类型的指针复位成空值 //就是清空可变参数列表 va_end(arg_ptr) ; return CountSum ; }