C++ 关于std::initializer\u列表设计的问题

C++ 关于std::initializer\u列表设计的问题,c++,c++11,C++,C++11,我对std::initializer\u list的设计有一些问题。 我在[support.initlist]中找不到答案 为什么它有一个明确定义的默认构造函数 为什么此构造函数不是constexpr 为什么方法size()不是constepr 为什么没有特征给出初始值设定项列表的大小(比如专门化std::tuple\u size) 为什么不能静态访问它的元素(比如专门化std::get) < > > SIEZOOS/在C++代码18.9节中使用< >初始化列表> /COD> < /P> >

我对
std::initializer\u list
的设计有一些问题。 我在[support.initlist]中找不到答案

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

为什么此构造函数不是
constexpr

为什么方法
size()
不是
constepr

为什么没有特征给出
初始值设定项列表的大小(比如专门化
std::tuple\u size

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


< > > <代码> SIEZOOS/<代码>在C++代码18.9节中使用< <代码> >初始化列表> /COD> < /P> > P>时发生了什么:

初始值设定项\列表类型的对象提供对 const E类型的对象[注:一对指针或一个指针加 长度是初始值设定项列表的明显表示形式。 初始值设定项列表用于实现指定的初始值设定项列表 在8.5.4.中,复制初始值设定项列表不会复制基础 要素-尾注]


我认为这些事情的大部分原因是std::initializer\u list实际上不是一个容器。它没有值语义,而是指针语义。引用的最后一部分说明了这一点:复制初始值设定项列表不会复制底层元素。既然它们只是为了初始化东西,我不觉得奇怪,你没有得到像元组这样更坚固的容器的所有细节。

为什么我只是想象我8岁的儿子用机器射击我,问我天空是蓝色的,巧克力牛奶从哪里来,什么是重力…@JohnDibling:你8岁的儿子有堆栈溢出帐户吗?不,你说呢?你确定吗?我认为大多数原因是std::initializer\u list实际上不是一个容器。它没有值语义,而是指针语义。顾名思义,它的唯一用途是初始化对象。我认为它是设计成比矢量或元组更轻的模板。@你的比喻是准确的:“我就像是一个贪心的人,问C++的神为什么选择这样做。”so@thb:关于minecraft和yu gi oh的问题在stack overflow上是离题的,所以我对此表示怀疑。:)