含有可变形参的函数

有时候我们想给函数传递实参,但是实参的数目又无法预知,这时候该怎么办?

initializer_list形参

如果函数的实参数目未知但是全部实参的类型都相同,可以使用initializer_list类型的形参。initializer_list是一种标准库类型,用于表示某种特定类型的值的数组。initializer_list定义在同名头文件中。

和vector一样,initializer_list也是模板类型,提供的操作有

1 initializer_list<T> lst;//默认初始化,T类型的空列表
2 initializer_list<T> lst={a,b,c……};
3 lst.size();//元素数量
4 lst.begin();
5 lst.end();
 1 #include <iostream>
 2 #include <initializer_list>
 3 using namespace std;
 4 void func(initializer_list<int> lst)
 5 {
 6     for (auto beg = lst.begin(); beg != lst.end(); ++beg)
 7         cout << *beg << " ";
 8 }
 9 int main()
10 {
11     func({ 1,2,3,4 });//形参传递值序列,必须把序列放在花括号里
12     return 0;
13 }

应该注意的是,initializer_list对象中的元素为常量值,无法改变其元素的值。

省略符形参

省略符形参是为了方便c++访问某些特殊c代码而设置的。应该注意大多数类类型的对象在传递给省略符形参时无法正确拷贝。

形式有以下两种:

void foo(…);//

void foo(parm_list,…);//parm_list指定了部分形参类型

扫描二维码关注公众号,回复: 10858123 查看本文章

猜你喜欢

转载自www.cnblogs.com/cs0915/p/12714462.html
今日推荐