美文网首页C++ 11
012 initializer_list 形参

012 initializer_list 形参

作者: 赵者也 | 来源:发表于2020-02-14 15:04 被阅读0次

如果函数的实参数量未知但是全部实参的类型都相同,我们可以使用 initializer_list 类型的形参。initializer_list 是一种标准库类型,用于表示某种特定类型的值得数组。initializer_list 类型定义在同名的头文件中,它提供的操作下:

initializer_list<T> lst;  // 默认初始化 T 类型元素的空列表
initializer_list<T> lst{a, b, c ...};  // lst 的元素数量和初始值一样多;lst 的元素是对应初始值的副本;列表中的元素是 const
lst2(lst); lst3 = lst;  // 拷贝或赋值一个 initializer_list 对象不会拷贝列表中的元素;拷贝后,原始列表和副本共享元素
lst.size();  // 列表中的元素数量
lst.begin();  // 返回指向 lst 中首元素的指针
lst.end();  // 返回指向 lst 中尾元素下一位置的指针

和 vector 一样,initializer_list 也是一种模板类型。定义 initializer_list 对象时,必须说明列表中所包含元素的类型:

initializer_list<string> ls;  // initializer_list 的元素类型是 string
initializer_list<int> li;  // initializer_list 的元素类型是 int

和 vector 不一样的是,initializer_list 对象中的元素永远是常量值,我们无法改变 initializer_list 对象中元素的值。

我们使用如下的形式编写输出错误信息的函数,使其可以作用于可变数量的实参:

void error_msg(std::initializer_list<std::string> il) {
    for (auto beg = il.begin();  beg != il.end(); ++beg) {
        std::cout << *beg << " ";
    }
    std::cout << std::endl;
}

如果想向 initializer_list 形参中传递一个值得序列,则必须把序列放在一对花括号内:

std::string test0 = "test0";
std::string test1 = "test1";
if (test0 != test1) {
    error_msg({"test", test0, test1});
} else {
    error_msg({"test", "ok"});
}

相关文章

  • 012 initializer_list 形参

    如果函数的实参数量未知但是全部实参的类型都相同,我们可以使用 initializer_list 类型的形参。ini...

  • C++可变形参函数类型 initializer_list

    initializer_list形参 initializer_list是一种标准库类型,用于表示某种特定类型的值得...

  • 《C++ Primer》6.2

    1.使用引用避免拷贝 2.使用引用形参返回额外信息 3.C++ 11 initializer_list

  • C++11新特性(15)- initializer_list形参

    C语言中的可变参数 编程过程中经常会遇到希望函数的参数可变的情况,一个最常见的例子就是神奇的printf函数,它可...

  • swift

    swift 函数 一、函数的定义函数的定义格式 形参列表的格式形参名1: 形参类型1, 形参名2: 形参类型2, ...

  • js自定义类&自定义对象

    自定义类: function 类名(形参1,形参2){ this.属性1=形参1; this.属性2=形参2; t...

  • Swift-函数基础

    一、函数 1、定义 1、声明:func 函数名(形参名:形参类型,形参名:形参类型)-> 返回值类型 2、调用:函...

  • swift函数基础知识

    1、函数声明和调用 通用函数声明格式:func 函数名称(形参名:形参类型,形参名:形参类型,···)->返回值类...

  • 形参

    编程中有时候递归需要保存当前的状态,那么传递的如果是形参的话,返回的时候父节点的值就不会变了。 例如 C++ 的 ...

  • C++supplement之可变数量的形参定义

    当不确定函数的形参数量时,除了函数重构外,可以通过模板类型initializer_list来进行定义,如下图...

网友评论

    本文标题:012 initializer_list 形参

    本文链接:https://www.haomeiwen.com/subject/gzskyqtx.html