来源:https://songlee24.github.io/2014/07/22/cpp-changeable-parameter/
1. initializer_list形参
如果函数的实参数量未知
但是全部实参的类型都相同
,我们可以使用initializer_list类型的形参(C++11新标准)。和vector一样,initializer_list也是一种模板类型。下面看看initializer_list提供的一些操作:
#include<initializer_list> // 头文件
initializer_list<T> lst; // 默认初始化,T类型元素的空列表
initializer_list<T> lst{a,b,c...}; // 初始化为初始值列表的副本
lst2(lst) // 拷贝或赋值不会拷贝列表中的元素;拷贝后,
lst2 = lst // 原始列表和副本共享元素
lst.size() // 列表中的元素数量
lst.begin() // 返回指向lst中首元素的指针
lst.end() // 返回指向lst中尾元素下一位置的指针
例子
string func(initializer_list<string> li)
{
string str("");
for(auto beg=li.begin(); beg!=li.end(); ++beg)
str += *beg;
return str;
}
int main()
{
cout << func({"This"," ","is"," ","C++"}) << endl;
return 0;
}
2. 省略符形参
函数可以用省略符形参”…”表示不定参数部分,省略符形参只能出现在形参列表的最后一个位置,它的形式如下:
void foo(parm_list, ...);
// 典型例子
int printf(const char* format, ...)
省略符形参应该仅仅用于C和C++通用的类型,因为大多数类类型的对象在传递给省略符形参时都无法正确拷贝