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

Is this aggregate initialization or default initialization in C++?

考虑以下程序。

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

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

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

您想知道为什么它在 C 中不起作用。这种语法在 C 中根本不存在,请参阅 this answer

聚合初始化是列表初始化的一种,初始化聚合。聚合是数组类型的对象,或具有 this page.

上定义的特征的对象

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

自 C++11 起,与其他 SO 答案(例如: or this)相比,我会说这是:

  1. a value-initialization (int{}) 后跟
  2. a copy-initialization (int a=int{}).

顺便说一下,从 C++17 开始,第二步应该消失了,因为需要 int{} 来直接初始化 a