为啥在没有初始化任何内容时使用初始化列表?
Posted
技术标签:
【中文标题】为啥在没有初始化任何内容时使用初始化列表?【英文标题】:Why use an initializer list when it initializes nothing?为什么在没有初始化任何内容时使用初始化列表? 【发布时间】:2022-01-05 15:21:50 【问题描述】:在这个sn-p中:
struct Result
Result() : output1();
int output1[100];
Result() : output1();
是做什么的?
我知道: output1()
是初始化列表,但是为什么在它什么都不做的时候还要提到它呢?
【问题讨论】:
如果你不知道它做了什么,那你为什么认为它什么都不做呢? 【参考方案1】:它做了一些事情:它将 output1 初始化为零,而不是让它未初始化。
详细来说,这称为值初始化,这里详细解释:https://en.cppreference.com/w/cpp/language/value_initialization
值初始化的效果是:
如果 T 是没有默认构造函数的类类型,或者具有用户提供或删除的默认构造函数的类类型,则该对象是默认初始化的; 如果 T 是具有既不是用户提供也不是删除的默认构造函数的类类型(即,它可能是具有隐式定义或默认构造函数的类),则对象为零初始化,语义检查默认初始化的约束,如果 T 有一个非平凡的默认构造函数,则该对象是默认初始化的; 如果 T 是数组类型,则数组的每个元素都是值初始化的; 否则,对象被零初始化。
因为它是一个数组,所以适用第 3 种情况。然后该规则递归地应用于数组中的每个值,导致案例 4 将值设置为 0。
【讨论】:
为视觉学习者添加此评论:查看this 代码示例。以上是关于为啥在没有初始化任何内容时使用初始化列表?的主要内容,如果未能解决你的问题,请参考以下文章