2 回答
TA贡献1796条经验 获得超7个赞
它几乎需要。具体而言,第23.3.2.1/2节说:
数组是一个聚合(8.5.1),可以使用以下语法初始化
array<T, N> a = { initializer-list };
其中initializer-list是逗号分隔的列表,其中包含最多N个元素,其类型可转换为T。
由于它是一个聚合,因此不能使用任何类型的构造函数将初始化列表中的数据转换为正确的格式。这实际上仅留下一种可能性:它唯一可以存储的是值本身。
我想一个可能会std::array在指定的数据之后存储某种辅助数据,例如将额外的内存设置为某个预定义的值,因此,如果您在数组末尾进行写操作,则可能会更改该数据。然后,编译器/运行时将在关闭时检查这些值,如果您更改了这些值,请报告代码的未定义行为。
它也可能是一个编译器可以用于做填充/对齐不同std::array比内置阵列。一个甚至可能需要这样做的明显例子是支持超对齐要求,例如与Intel SSE指令一起使用的数据。内置数组不支持超对齐,但是我认为的规范std::array可能不够宽松。
底线:在不考虑可能存在多少可能性的问题的情况下,很明显std::array不必一定要遵循您所要求的规则。
TA贡献1865条经验 获得超7个赞
实时示例(是的,这没有什么证明。我仔细搜索了Standard,没有发现任何聚合或文字类型的布局要求,仅是标准布局类型;以前的POD在C ++ 03中具有这些要求。
- 2 回答
- 0 关注
- 701 浏览
添加回答
举报
