7

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

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

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

为什么方法size()不行constexpr

为什么没有特征给出initializer_list(如专业化std::tuple_size)的大小?

为什么不能静态访问它的元素(比如 specialize std::get)?

sizeof应用于时会发生什么initializer_list

4

1 回答 1

3

从 C++ 标准的第 18.9 节:

initializer_list 类型的对象提供对 const E 类型的对象数组的访问。 [注意:一对指针或一个指针加上一个长度将是 initializer_list 的明显表示。initializer_list 用于实现 8.5.4 中指定的初始化列表。复制初始化列表不会复制底层元素。——尾注]

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

于 2013-07-12T20:52:12.417 回答