1

考虑以下程序。

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

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

4

3 回答 3

5

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

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

于 2015-06-08T13:41:53.123 回答
2

聚合初始化是一种列表初始化,它初始化聚合。聚合是数组类型的对象,或具有此页面上定义的特征的对象。

在这种情况下,初始化的类型很可能是值初始化。

于 2015-06-08T13:42:26.723 回答
0

由于 C++11,与其他 SO 答案(例如:thisthis)相比,我会说这是:

  1. 初始化( int{}) 后跟
  2. 复制初始化( ) int a=int{}

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

于 2019-02-21T12:14:23.503 回答