• initializer_list 列表初始化


    initializer_list 列表初始化

    用花括号初始化器列表初始化一个对象,其中对应构造函数接受一个 std::initializer_list 参数.

    #include <iostream>
    #include <vector>
    #include <initializer_list>
     
    template <class T>
    struct S {
        std::vector<T> v;
        S(std::initializer_list<T> l) : v(l) {
             std::cout << "constructed with a " << l.size() << "-element list
    ";
        }
        void append(std::initializer_list<T> l) {
            v.insert(v.end(), l.begin(), l.end());
        }
        std::pair<const T*, std::size_t> c_arr() const {
            return {&v[0], v.size()};  // 在 return 语句中复制列表初始化
                                       // 这不使用 std::initializer_list
        }
    };
     
    template <typename T>
    void templated_fn(T) {}
     
    int main()
    {
        S<int> s = {1, 2, 3, 4, 5}; // 复制初始化
        s.append({6, 7, 8});      // 函数调用中的列表初始化
     
        std::cout << "The vector size is now " << s.c_arr().second << " ints:
    ";
     
        for (auto n : s.v)
            std::cout << n << ' ';
        std::cout << '
    ';
     
        std::cout << "Range-for over brace-init-list: 
    ";
     
        for (int x : {-1, -2, -3}) // auto 的规则令此带范围 for 工作
            std::cout << x << ' ';
        std::cout << '
    ';
     
        auto al = {10, 11, 12};   // auto 的特殊规则
     
        std::cout << "The list bound to auto has size() = " << al.size() << '
    ';
     
    //    templated_fn({1, 2, 3}); // 编译错误!“ {1, 2, 3} ”不是表达式,
                                 // 它无类型,故 T 无法推导
        templated_fn<std::initializer_list<int>>({1, 2, 3}); // OK
        templated_fn<std::vector<int>>({1, 2, 3});           // 也 OK
    }

  • 相关阅读:
    英文词频统计预备,组合数据类型练习
    凯撒密码、GDP格式化输出、99乘法表
    字符串基本操作
    条件、循环、函数定义 练习
    Turtle库基础练习
    Python基础练习
    理解管理信息系统
    HTML鼠标划过更换图片(透视X-ray)
    谷歌浏览器默认允许flash运行
    鼠标单击烟花效果
  • 原文地址:https://www.cnblogs.com/douzujun/p/10620287.html
Copyright © 2020-2023  润新知