initializer_list形参
initializer_list是一种标准库类型,用于表示某种特定类型的值得数组
函数实参数量未知且全部实参类型相同时可使用initializer_list类型的形参
//默认初始化:T 类型元素的空列表
initializer_list<T> lst;
//lst的元素是对应初始值的副本;列表中的元素是const
initializer_list<T> lst{a,b,c...};
//列表中的元素数量
lst.size();
//返回指向lst中首元素的指针
lst.begin()
//返回指向lst中尾元素下一位置的指针
lst.end()
initializer_list对象中的元素永远是常量值,不可能改。
并和vector一样也是一种模板类型,定义时必须指定元素类型
initializer_list<string> ls;
initializer_list<double> li;
示例:
void error_msg(initializer_list<string> lt)
{
for(auto beg = lt.begin(); beg != lt.end(); ++beg)
{
cout << *beg << " ";
}
cout << endl;
}
同样适用迭代器来遍历initializer_list的元素,并通过解引用beg来获得当前元素的值
如果想向initializer_list形参中传递一个值得序列,则必须把序列放在一对花括号内:
string str1,str2;
...
if(str1 != str2)
error_msg({"function error_msg", str1, str2});
else
error_msg({"function error_msg", "okay!"});
包含initializer_list类型形参的函数也可以有其它形参,比如:
void error_msg(int num,initializer_list<string> lt)
{
for(auto beg = lt.begin(); beg != lt.end(); ++beg)
{
cout << *beg << " ";
num++;
}
cout << num << endl;
}
//或
void error_msg(ErrCode e, initializer_list<string> lt)
{
cout << e.msg() << ": ";
for(auto beg = lt.begin(); beg != lt.end(); ++beg)
{
cout << *beg << " ";
}
cout << endl;
}
//调用:
string str1,str2;
...
if(str1 != str2)
error_msg(ErrCode(42), {"function error_msg", str1, str2});
else
error_msg(ErrCode(0), {"function error_msg", "okay!"});
网友评论