有关std :: initializer_list设计的问题

a.l*_*ram 7 c++ c++11

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

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

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

为什么方法size()不是constexpr?

为什么没有特质给出大小initializer_list(如专精std::tuple_size)?

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

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

Bor*_*der 3

来自 C++ 标准第 18.9 节:

\n\n
\n

类型initializer_list 的对象提供对const E 类型的对象数组的访问。 [ 注意:一对指针或一个指针加上\na 长度将是initializer_list 的明显表示。\ninitializer_list 用于实现初始化列表,如下所示8.5.4 中指定。复制初始值设定项列表不会复制底层\n 元素。\xe2\x80\x94 尾注]

\n
\n\n

我认为大多数这些事情的原因是 std::initializer_list 实际上并不是一个容器。它没有值语义,它有指针语义。引用的最后一部分很明显:复制初始值设定项列表不会复制底层元素。鉴于它们只是为了初始化事物的目的,我认为您没有获得更强大的容器(例如元组)的所有优点并不奇怪。

\n