我对std::initializer_list
的设计有一些疑问。
我没有在 [support.initlist] 中找到答案。
为什么它有明确定义的默认构造函数?
为什么这个构造函数不是constexpr
?
为什么方法size()
不是constexpr
?
为什么没有特征给出initializer_list
的大小(就像专门化std::tuple_size
一样)?
为什么不可能静态访问其元素(如专门化std::get
)?
将sizeof
应用于initializer_list
时会发生什么?
答案 0 :(得分:3)
来自C ++标准的第18.9节:
类型为initializer_list的对象提供对数组的访问 const E类型的对象。[注意:一对指针或一个指针加上 长度将是initializer_list的明显表示。 initializer_list用于实现指定的初始化列表 在8.5.4。复制初始化列表不会复制基础 元素。 - 结束说明]
我认为大多数这些事情的原因是std :: initializer_list实际上不是一个容器。它没有值语义,它有指针语义。引用的最后部分显而易见:复制初始化列表不会复制基础元素。看到它们仅用于初始化事物的目的,我认为不是令人惊讶的是,你没有获得更多健壮的容器(例如元组)的所有细节。