C++11-initializer_list
要点
由编译器在编译阶段解释该语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18template<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
6vector(initializer_list<value_type> __l,
const allocator_type& __a = allocator_type())
: _Base(__a)
{
_M_range_initialize(__l.begin(), __l.end(), random_access_iterator_tag());
}