C++ 这是C+中的聚合初始化还是默认初始化+;?
考虑以下程序C++ 这是C+中的聚合初始化还是默认初始化+;?,c++,initialization,aggregate-initialization,C++,Initialization,Aggregate Initialization,考虑以下程序 #include <iostream> int main() { int a=int{}; std::cout<<a; } #包括 int main() { int a=int{}; std::cout空括号或大括号(T()或T{})执行。例外情况是类型为聚合的情况,在这种情况下将使用聚合初始化。由于int不是聚合,它将被值初始化,并且由于它不是类或数组,值初始化将执行零初始化 您想知道为什么它在C中不起作用。这种语法在C中根本不存在,请参
#include <iostream>
int main()
{
int a=int{};
std::cout<<a;
}
#包括
int main()
{
int a=int{};
std::cout空括号或大括号(T()
或T{}
)执行。例外情况是类型为聚合的情况,在这种情况下将使用聚合初始化。由于int
不是聚合,它将被值初始化,并且由于它不是类或数组,值初始化将执行零初始化
您想知道为什么它在C中不起作用。这种语法在C中根本不存在,请参见。空括号或大括号(t()
或t{}
)执行。例外情况是类型为聚合的情况,在这种情况下将使用聚合初始化。由于int
不是聚合,它将被值初始化,并且由于它不是类或数组,值初始化将执行零初始化
您想知道为什么它在C中不起作用。这种语法在C中根本不存在,请参阅。聚合初始化是一种列表初始化类型,用于初始化聚合。聚合是一种类型为array的对象,或具有在上定义的特征的对象
在这种情况下,初始化的类型很可能是聚合初始化是一种列表初始化类型,用于初始化聚合。聚合是一个数组类型的对象,或具有上定义的特征的对象
在这种情况下,初始化的类型很可能是C++11以来的,与其他SO答案(例如:or)相比,我认为这是:
一个(int{}
)后跟
a(inta=int{}
)
顺便说一句,从开始,第二步应该消失,因为从C++11开始,直接初始化a
需要int{}
,与其他SO答案(例如:or)相比,我认为这是:
一个(int{}
)后跟
a(inta=int{}
)
顺便说一下,从开始,第二步应该消失,因为直接初始化int{}
需要a
@downvorters:谁投了反对票?为什么投反对票?有什么问题吗?int
不是聚合。这是默认初始化。聚合初始化应该是int a[]={1,2,3}
@CoryKramer:那么,为什么它在C中不起作用呢?@CoryKramer这不是默认的初始化。它(int{}
)是列表初始化,在本例中执行值初始化。@Downvoters:谁投了反对票?为什么投反对票?有什么问题吗?int
不是聚合。它是默认初始化。聚合初始化应该是int a[]={1,2,3}
@CoryKramer:那么,为什么它在C中不起作用呢?@CoryKramer这不是默认的初始化。它(int{}
)是列表初始化,在本例中执行值初始化。感谢解释和链接给出的好答案。感谢解释和链接给出的好答案。