首页 >后端开发 >C++ >C 标准是否保证'std::array”与内置数组具有相同的大小和内存布局?

C 标准是否保证'std::array”与内置数组具有相同的大小和内存布局?

Linda Hamilton
Linda Hamilton原创
2024-11-19 22:36:031035浏览

Does the C   Standard Guarantee the Same Size and Memory Layout for `std::array` as for Built-in Arrays?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn