美文网首页
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

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