原创
【博客大赛】《C++ Primer》学习笔记(十七)函数的可变参数
如果函数需要接收的参数个数不定,有两种新的方法可以实现可变的参数。
第一是使用库里定义的类initializer_list,它可以接收相同类型的可变长度的参数。
第二是使用variadic template,这个以后再学。
最原始的方法是使用省略号。
这一节会学习它,但是要注意的是,它仅仅用在和C语言的接口上,这意味能不用它就不用它。
----------------
initializer_list
它和vector一样,是一种template type,目前我们可以不掌握它的原理,而仅仅学会使用它。
initializer_list<T> lst; //类型为T的空list
initializer_list<T> lst{a,b,c...} //类型为T的list,元素为a/b/c...,且它们都为const的
lst2(lst) //复制lst到lst2
lst2 = lst //使用lst为lst2赋值。复制和复制都不会复制元素,它们会共享元素
lst.size() //list的元素个数
lst.begin() //list的起始地址
lst.end() //list的终止地址
和vector一样,initializer_list必须使用type来进行初始化;
和vector不同,initializer_list的元素总是const的。
举例说明:
void error_msg(initializer_list<string> lstr)
{
for (auto beg = lstr.begin(); beg != lstr.end(); ++beg)
cout << *beg << " ";
cout << endl;
}
我们可以这么调用它:
error_msg({"functionX", expected, actual});
error_msg({"functionX", "okay"});
**** 这里出现了错误:
Symbol 'initializer_list' could not be resolved hello.cpp
有网页说是增加宏定义: __GXX_EXPERIMENTAL_CXX0X__
但是貌似没有用!
----------------
Ellipsis
省略号仅仅适用于C与C++共同的部分。
DiracFatCat 2016-3-22 16:10
东莞元宝代理Microchip长电二三极管 2016-3-21 08:43
用户377235 2015-8-10 23:52
用户1369807 2015-8-5 17:07
2005jiangxu_694877046 2015-8-4 08:40
2005jiangxu_694877046 2015-8-4 08:39
用户377235 2015-3-19 11:42
leawise_816723039 2015-3-16 11:20
4917821_302453205 2015-3-16 09:39
用户402158 2014-10-13 14:49