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 ;
}
省略符形参是为了便于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) ;
}
#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://blog.csdn.net/u011476173/article/details/38455953