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 ;
}

  

原文地址:https://www.cnblogs.com/E-star/p/3191291.html