博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
可变參数
阅读量:6589 次
发布时间:2019-06-24

本文共 1277 字,大约阅读时间需要 4 分钟。

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 ;

}

转载地址:http://chzio.baihongyu.com/

你可能感兴趣的文章
CISCO路由器NTP服务器配置
查看>>
oracle kill所有plsql developer进程
查看>>
12c rac 实例无法启动之磁盘组空间耗尽
查看>>
keepalived双机热备原理及实例部署LVS+keepalived
查看>>
曲线学习PyQt5方案一
查看>>
爬虫采集-基于webkit核心的客户端Ghost.py [爬虫实例]
查看>>
企业私有云之rabbitmq高可用
查看>>
OpenCV学习】矩阵运算和操作2
查看>>
nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器
查看>>
Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境
查看>>
关于在arm裸板编程时使用printf问题的解决方法
查看>>
开源人工智能技术将改变一切
查看>>
2015 上半年 JavaScript 使用统计数据
查看>>
《Python算法教程》——1.6 如果您感兴趣
查看>>
干货 | 豆子科技首席架构师钟声:Java的纯真年代
查看>>
深度解析Java8 – AbstractQueuedSynchronizer的实现分析(下)
查看>>
SSH原理与运用(一):远程登录
查看>>
Spring Framework 4.2 中的新功能和增强功能
查看>>
动态代理解决网站字符集编码
查看>>
我所想的GIX4的权限
查看>>