有关std :: initializer设计的问题

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

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

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

为什么方法size()不是constexpr

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

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

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


从C ++标准的第18.9节:

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

我认为大部分这些事情的原因是std :: initializer_list实际上并不是一个容器。 它没有价值语义,它有指针语义。 引用的最后部分显而易见:复制初始化程序列表不会复制基础元素。 鉴于它们仅仅是为了初始化事物而设计的,我不认为你没有得到像元组这样更强大的容器的所有优点是不足为奇的。

链接地址: http://www.djcxy.com/p/14649.html

上一篇: questions regarding the design of std::initializer

下一篇: Oracle PL/SQL code conventions