`T array[N]{}`是值初始化还是聚合初始化?规则疑问
数组空大括号初始化的问题解答
1. T array[N]{};属于值初始化还是聚合初始化?
属于聚合初始化。因为数组是C++标准定义的聚合类型,当聚合类型使用空大括号{}作为初始化器时,触发的是聚合初始化规则,而非普通的值初始化。
2. 三段表述是否矛盾?
不矛盾,是理解时没理清规则的层级关系:
- 值初始化的定义是“使用空初始化器构造对象时的操作”,但这是通用规则,存在例外——当对象是聚合类型时,会优先触发聚合初始化,而非通用的值初始化;
- 数组作为聚合类型的一种,它的聚合初始化规则明确要求:对数组的每个元素执行值初始化;
- 三段表述是递进逻辑:先判断对象是否为聚合类型(数组符合),走聚合初始化分支;再执行数组聚合初始化的具体逻辑——每个元素做值初始化。这完全符合C++标准,不存在矛盾。
内容的提问来源于stack exchange,提问作者andreee
相关产品推荐
相关产品推荐

