可变参数

本文介绍了C++中处理不确定数量参数的方法,包括使用std::initializer_list、省略符形参及可变参数宏的方式,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++中传递参数时,有时候不确定参数的数量,这时候可以使用可变参数。如下:

1、std::initializer_list

C++11标准,用法类似vector,参数类型需相同。用法如下:

#include <initializer_list>

void  method(std::initializer_list<int> il)

{

        for(auto i: il)

        {

                printf("%d", i) ;

        }

}


int _tmain(int argc, _TCHAR* argv[])

{

        method({1, 3, 4, 6, 7}) ;

        return 0 ;

}


2、省略符形参

省略符形参是为了便于C++程序访问某些特殊的C代码而设置的,这些代码使用了名为varargs的C标准库功能。通常,省略符形参不应用于其他目的。

备:省略符形参应该仅仅用于C和C++通用的类型。特别注意的是,大多数类类型的对象在传递给省略符形参时都无法正确拷贝。

省略符形参必须在参数列表的最后,而前面必须至少有一个形参。 用法如下:

#include <stdarg.h>

void method(int i, ...)

{

        int v ;

        va_list params ;//声明可变参数列表

        va_start(params, i) ; //根据可变参数前的参数获得可变参数的起始地址

        do{

                v = va_arg(params, int) ; //从可变参数列表中获得参数的值,类型为int

                printf("%d", v) ;

        }while(v != 0) //需要自己设置可变参数列表的结束标志,即当读到某个值时表示可变参数列表到达末尾,如果没有设置结束标准会继续读取内存数据,会出现意想不到的问题。

        va_end(params) ; //结束

}


//使用省略符形参 格式化字符串

void format(const char* format, ...)

{

        char buf[1024] ;

        va_list params ;

        va_start(params, format) ;

        vsnprintf_s(buf, 1024, 1024, format, params) ;

        va_end(params) ;

        printf("%s", buf) ;

}


3、可变参数宏

#define FORMAT(format, ...) format(format, ##__VA_ARGS__) //使用 ##__VA_ARGS__传递可变参数


int _tmain(int argc, _TCHAR* argv[])

{

        method(1, 3, 4, 6, 7, 0) ;

        format("int: %d, string: %s, float: %f", 10, "test", 1.23) ;
        FORMAT("int: %d, string: %s, float: %f", 10, "test", 1.23) ;

        return 0 ;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值