这是C ++中的聚合初始化还是默认初始化?

时间:2015-06-08 13:30:54

标签: c++ initialization aggregate-initialization

考虑以下计划。

#include <iostream>
int main()
{
    int a=int{};
    std::cout<<a;
}

是使用聚合初始化还是默认初始化?我很困惑。

3 个答案:

答案 0 :(得分:5)

空括号或大括号(T()T{})执行value initialization。例外情况是类型是聚合,在这种情况下将使用聚合初始化。由于int不是聚合,因此它将被初始化值,并且由于它不是类或数组,因此值初始化将执行零初始化。

你想知道为什么它在C中没有用。这样的语法根本不存在于C中,参见this answer

答案 1 :(得分:2)

聚合初始化是一种 list 初始化,它初始化聚合。聚合是类型为array的对象,或具有this page.

上定义的特征的对象

在这种情况下,初始化的类型很可能是value initialization.

答案 2 :(得分:0)

从C ++ 11开始,通过与其他SO答案(例如:thisthis)进行比较,我会说这是:

  1. 一个value-initialization {'final_repayment_date_month': Period(data='2016-01', other='M'), 'lead_id': [21293, 21293], 'total': 21293} {'final_repayment_date_month': Period(data='2016-02', other='M'), 'lead_id': [39539, 38702, 39448], 'total': 138982} {'final_repayment_date_month': Period(data='2016-03', other='M'), 'lead_id': [39540, 39527, 39474], 'total': 257523} )后跟
  2. 一个copy-initializationint{})。

C++17开始,第二步应该消失,因为需要int a=int{}来直接初始化int{}