这是 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)相比,我会说这是:
- a value-initialization (
int{}
) 后跟
- a copy-initialization (
int a=int{}
).
顺便说一下,从 C++17 开始,第二步应该消失了,因为需要 int{}
来直接初始化 a
。
考虑以下程序。
#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 答案(例如:
- a value-initialization (
int{}
) 后跟 - a copy-initialization (
int a=int{}
).
顺便说一下,从 C++17 开始,第二步应该消失了,因为需要 int{}
来直接初始化 a
。