c++ - c++ c风格零初始化{0}
问题描述
https://en.cppreference.com/w/cpp/language/zero_initialization表明零初始化发生在以下场景中:
int array[32] = {};
; 但从来没有说过这件事:
int array[32] = { 0 };
后者是否也在 C++ 中对整个数组进行零初始化,还是仅对第一个元素进行零初始化?如果是这样,结构也适用吗?
解决方案
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}
推荐阅读
- javascript - 每次单击按钮时 CSS 递增过渡动画
- html - CSS 方法:OOCSS 与 BEM
- mongodb - Mongo db 使用 docker 与 Node js 应用程序集成
- sql-server - 当 nvarchar 值 'Trading' 到数据类型 int 时转换失败
- css - antd 组件的 div 换行
- google-chrome-devtools - 控制台便利功能(实用程序 API)被屏蔽
- python - 如何在 Python 中将 idxmax 系列与 pandas 数据框连接起来?
- java - Libgdx 动画不播放或循环播放
- python - Udacity 测试(网络开发)
- r - IR ggplot2,当我使用“geom_tile”和“geom_text”时,一些单元格文本将被覆盖