热度 11
2016-3-20 18:23
743 次阅读|
2 个评论
如果函数需要接收的参数个数不定,有两种新的方法可以实现可变的参数。 第一是使用库里定义的类initializer_list,它可以接收相同类型的可变长度的参数。 第二是使用variadic template,这个以后再学。 最原始的方法是使用省略号。 这一节会学习它,但是要注意的是,它仅仅用在和C语言的接口上,这意味能不用它就不用它。 ---------------- initializer_list 它和vector一样,是一种template type,目前我们可以不掌握它的原理,而仅仅学会使用它。 initializer_listT lst; //类型为T的空list initializer_listT 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_liststring 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++共同的部分。