【问题标题】: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() 是初始化列表,但是为什么在它什么都不做的时候还要提到它呢?

【问题讨论】:

  • 如果你不知道它做了什么,那你为什么认为它什么都不做呢?

标签: c++ struct


【解决方案1】:

它做了一些事情:它将 output1 初始化为零,而不是让它未初始化。

详细来说,这称为值初始化,这里详细解释:https://en.cppreference.com/w/cpp/language/value_initialization

值初始化的效果是:

  1. 如果 T 是没有默认构造函数的类类型,或者具有用户提供或删除的默认构造函数的类类型,则该对象是默认初始化的;
  2. 如果 T 是具有既不是用户提供也不是删除的默认构造函数的类类型(即,它可能是具有隐式定义或默认构造函数的类),则对象为零初始化,语义检查默认初始化的约束,如果 T 有一个非平凡的默认构造函数,则该对象是默认初始化的;
  3. 如果 T 是数组类型,则数组的每个元素都是值初始化的;
  4. 否则,对象被零初始化。

因为它是一个数组,所以适用第 3 种情况。然后该规则递归地应用于数组中的每个值,导致案例 4 将值设置为 0。

【讨论】:

  • 为视觉学习者添加此评论:查看this 代码示例。
猜你喜欢
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2012-05-17
  • 2015-02-20
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多