首页 > 解决方案 > c++ c风格零初始化{0}

问题描述

https://en.cppreference.com/w/cpp/language/zero_initialization表明零初始化发生在以下场景中:

int array[32] = {};

; 但从来没有说过这件事:

int array[32] = { 0 };

后者是否也在 C++ 中对整个数组进行零初始化,还是仅对第一个元素进行零初始化?如果是这样,结构也适用吗?

标签: c++carrays

解决方案


ISO/IEC N489 §9.4.1状态

  • (5)对于非联合聚合,每个不是显式初始化元素的元素初始化如下:

    • (5.1)如果元素具有默认成员初始化程序 (11.4),则从该初始化程序初始化元素。

    • (5.2)否则,如果元素不是引用,则从空的初始化列表 (9.4.4) 复制初始化该元素。

    • (5.3)否则,程序是非良构的。

§9.4.4状态

  • (3.11)否则,如果初始化列表没有元素,则对象被值初始化。

标量的值初始化导致其零初始化。因此,第二个元素仅显式初始化为 0 array[0],其余元素将被初始化为零。


因此,下面的代码

int array[4] = {13};

array用值初始化

{13, 0, 0, 0}

推荐阅读