要点

  • 由编译器在编译阶段解释该语法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    template<class _E>
    class initializer_list
    {
    public:
    typedef _E value_type;
    typedef const _E& reference;
    typedef const _E& const_reference;
    typedef size_t size_type;
    typedef const _E* iterator;
    typedef const _E* const_iterator;

    private:
    iterator _M_array;
    size_type _M_len;

    // The compiler can call a private constructor.
    constexpr initializer_list(const_iterator __a, size_type __l)
    : _M_array(__a), _M_len(__l) { }
  • 拷贝该对象,并不会复制底层数据,因为是通过指针引用的!

  • 可以用来定义构造函数(初始化列表构造函数)

    myclass(initializer_list<int>);
    
  • 可以用来初始化STL,因为C++11之后,STL类增加了初始化列表构造函数

    1
    2
    3
    4
    5
    6
    vector(initializer_list<value_type> __l,
    const allocator_type& __a = allocator_type())
    : _Base(__a)
    {
    _M_range_initialize(__l.begin(), __l.end(), random_access_iterator_tag());
    }

参考

  1. http://en.cppreference.com/w/cpp/utility/initializer_list
  2. http://www.cplusplus.com/reference/initializer_list/initializer_list/?kw=initializer_list

留言