You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

std::array是否保证对其所有元素执行零初始化?

std::array 初始化规则及示例代码行为说明

核心结论

你给出的代码中,Bar 类的 foo 成员是否会全部零初始化,完全取决于 Bar 对象的实例化方式,不存在统一的肯定/否定答案。

不同初始化场景的具体表现

  • 默认初始化场景:写法为 Bar b;
    该场景下不会做零初始化:编译器为 Bar 生成的默认构造函数会默认初始化 foo 成员,而 std::array 是聚合类型,默认初始化时如果元素是 Foo 这类 POD 类型,所有成员都会是不确定的垃圾值,访问未初始化的成员属于未定义行为。
  • 值初始化场景:写法为 Bar b{}; 或 Bar b = Bar();
    该场景下所有字段都会被零初始化:值初始化会触发 Bar 对象整体先做零初始化,std::array 包裹的 2 个 Foo 元素的所有成员(包括普通成员 a、b,以及位域 c、d)都会被赋值为 0。

规则补充

std::array 本质是封装了原生数组的聚合类型,没有自定义构造函数,它的初始化规则和同类型的原生数组完全一致:

  • std::array<Foo, 2> arr; 等价于 Foo arr[2];
  • std::array<Foo, 2> arr{}; 等价于 Foo arr[2]{};

内容的提问来源于stack exchange,提问作者ImJa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:24:01