美文网首页
C++可变形参函数类型 initializer_list

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

作者: 猩猩隊長 | 来源:发表于2018-10-31 04:27 被阅读0次

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!"});

相关文章

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

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

  • 012 initializer_list 形参

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

  • c++ primer 阅读 day12

    函数 6.1函数基础 函数的形参列表 函数的返回类型 含有可变形参的函数主要用于输出错误日志,如果实参类型相同可以...

  • TypeScript接口

    属性类型接口 函数类型接口 定义了函数的参数。包括入参和出参。 可索引类型接口 类类型接口

  • 函数与数组

    当函数的形参为基本数据类型时,是值传递,函数内部改变形参,外部实参的值不变 当函数的形参为数组时,是内存地址的传递...

  • C++隐式类型转换的问题及explicit关键字

    C++隐式类型转换的问题 什么是隐式类型转换? 可以用 单个形参来调用 的构造函数定义了从 形参类型 到 该类类型...

  • C++系列 --- 类型转换:static_cast、reint

    一、隐式类型转换 《C++ Primer》中提到: “可以用 单个形参来调用 的构造函数定义了从 形参类型 到 该...

  • 函数变参的使用

    介绍C/C++,java,和go语言对函数变参的使用。 1. C/C++语言的变参 1.1 变参函数声明 变参函数...

  • 深入了解 javascript 函数的参数

    javascript 函数的参数和C++之类的强类型语言有很大的差别。下面详细介绍了 javascript 函数参...

  • chapter-6

    C++ Primer第六章! //函数包含返回类型声明、函数名、形参、实参、函数体等等部分,另外可以对函数进行重载...

网友评论

      本文标题:C++可变形参函数类型 initializer_list

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