C 标准定义了 std::array 的大小吗?
在 C 11 中,std::array 提供连续存储,性能相当到常规数组。但是,尚不清楚 std::array 的大小和内存布局是否与普通数组相同。
标准要求
C 标准 (§23.3.2.1/2)将数组定义为通过以下方式初始化的聚合:
作为聚合,std::array 无法使用构造函数来转换初始值设定项列表中的数据。这意味着它主要存储实际数据值。
潜在的特定于实现的行为
从技术上讲,std::array 可以包含辅助数据或非辅助数据。 - 标准对齐,这会偏离正常数组的行为。
例如,编译器可以在 std::array 的末尾添加一个哨兵值来检测越界写入尝试。或者,std::array 可以支持超级对齐(例如,英特尔 SSE 指令),但内置数组不支持。
预期行为
一般来说,您可以期望以下代码按预期运行:
大多数编译器(例如 GNU 和 Intel)都遵循此行为。然而,值得注意的是,该标准并没有明确保证 std::array 和普通数组具有相同的内存布局。
以上是C 标准是否保证'std::array”与内置数组具有相同的大小和内存布局?的详细内容。更多信息请关注PHP中文网其他相关文章!