有关std :: initializer_list设计的问题

时间:2013-07-12 20:01:27

标签: c++ c++11

我对std::initializer_list的设计有一些疑问。 我没有在 [support.initlist] 中找到答案。

为什么它有明确定义的默认构造函数?

为什么这个构造函数不是constexpr

为什么方法size()不是constexpr

为什么没有特征给出initializer_list的大小(就像专门化std::tuple_size一样)?

为什么不可能静态访问其元素(如专门化std::get)?

sizeof应用于initializer_list时会发生什么?

1 个答案:

答案 0 :(得分:3)

来自C ++标准的第18.9节:

  

类型为initializer_list的对象提供对数组的访问   const E类型的对象。[注意:一对指针或一个指针加上   长度将是initializer_list的明显表示。   initializer_list用于实现指定的初始化列表   在8.5.4。复制初始化列表不会复制基础   元素。 - 结束说明]

我认为大多数这些事情的原因是std :: initializer_list实际上不是一个容器。它没有值语义,它有指针语义。引用的最后部分显而易见:复制初始化列表不会复制基础元素。看到它们仅用于初始化事物的目的,我认为不是令人惊讶的是,你没有获得更多健壮的容器(例如元组)的所有细节。