前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++可变参数

C++可变参数

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-25 15:28:58
1.8K0
发布2019-01-25 15:28:58
举报

Java中的可变参数其实就是数组,对C++的可变参数比较好奇,所以上网查了资料,了解下!

首先,C++中可变参数的定义:

void function(...)

我们一般会在参数中定义可变参数的个数,所以有以下形式:

void function(int num ...)

我在Visual Studio 2010下试验过void function(int num, ...)也能正常编译。

下面先看一个例子:

代码语言:javascript
复制
#include <iostream>
#include <cstdarg>
using namespace std;

void print(int num ...)
{
	va_list ap;
	va_start(ap, num);
	for (int i = 0; i < num; i++)
	{
		cout<<va_arg(ap,int)<<endl;
	}
	va_end(ap);
}

int main() 
{
	print(9,1,2,3,4,5,6,7,8,9);
	return 0;
}

结果如下:

代码语言:javascript
复制
1
2
3
4
5
6
7
8
9
请按任意键继续...

在使用可变参数时必须要用到三个库函数va_start()、va_arg()和va_end()。使用这三个函数时,必须包含“stdarg.h”(C风格)或者“cstdarg”(C++风格)。

首先,要定义一个va_list类型的变量,如实例中的ap。va_list与int,float类同,它是C++系统预定义的一个数据类型,只有通过这种类型的变量才能从实参表中取出可变参数。

va_start()函数具有两个参数,第一个参数时va_list类型的变量,第二个参数是省略号“...”前面的变量名。该函数的作用是初始化参数个数可变的函数,为取第一个可变的参数做好准备。

函数va_arg()也具有两个参数,第一个参数与函数va_start()的第一个参数相同,第二个参数应该是一个C++中预定义的数据类型,如实例中int。该函数的作用是将第一个参数所指向的可变参数转换成由第二个参数所指定的类型的数据,并将该数据作为函数va_arg()的返回值,同时使va_arg()的第一个参数指向下一个可变的参数,为取下一个可变参数做好准备。

函数va_end()只有一个参数,该参数必须与函数va_start()的第一个参数相同。该函数的作用是做好取可变实参的收尾工作,以便参数个数可变的函数能够正常返回。

使用可变参数的函数要注意一下几点:

(1)定义函数时,固定参数部分放在参数表的前面,省略号“...”表示可变参数。

(2)必须使用函数va_start()来初始化可变参数,为取第一个可变参数做好准备工作;使用函数va_arg()依次取各个可变参数值;最后用函数va_end()做好结束工作,以便能正确地返回。

(3)在调用参数个数可变的函数时,必定有一个参数指明可变参数的个数或总的参数个数。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年03月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档