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

`std::array` 是否保证与常规 C 数组具有相同的大小和内存布局?

Susan Sarandon
发布: 2024-11-23 06:06:21
原创
1069 人浏览过

Does `std::array` Guarantee the Same Size and Memory Layout as a Regular C   Array?

std::array 大小和内存布局的保证语义

在 C 11 中,std::array 提供的连续存储和性能与常规数组。然而,标准对 std::array 的要求提出了一个问题:它是否一定具有与等效数组相同的大小和内存布局?

根据 C 标准的 §23.3.2.1/2,std: :array 是使用初始值设定项列表初始化的聚合。由于聚合不能使用构造函数来转换数据,因此初始化列表必须直接表示存储在数组中的值。

这意味着 std::array 的大小必须由其中指定的元素数量确定模板参数。此外,内存布局应与数组的内存布局相同,没有任何辅助数据或填充。

虽然标准没有明确说明此要求,但 std::array 的聚合性质强烈暗示了这一要求以及连续存储的要求。

这意味着 sizeof(std::array) 确实应该等于 sizeof(int) * N,确保原始查询中给出的示例将按预期运行。

实际上,编译器和实现通常会遵循这种预期行为。然而,值得注意的是,该标准并未严格执行,因此存在不合规实施的可能性。

以上是`std::array` 是否保证与常规 C 数组具有相同的大小和内存布局?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板