根据C ++标准,以下三种结构定义之间是否存在差异?
struct Foo
{
int a;
};
struct Foo
{
int a{};
};
struct Foo
{
int a{0};
};
最后两个是C ++ 11。
答案 0 :(得分:9)
根据第一个定义,如果您创建具有自动存储持续时间的Foo
实例,a
将被取消初始化。您可以执行聚合初始化来初始化它。
Foo f{0}; // a is initialized to 0
Foo
的第二和第三个定义都会将数据成员a
初始化为0
。
在C ++ 11中,2和3都不是aggregates,而是C ++ 14 changes that rule,所以尽管添加了大括号或等于初始值<,但它们都保持聚合状态/ em>的
答案 1 :(得分:4)
struct Foo
{
int a;
}bar;
如果不是全局范围或非静态范围,则bar.a未初始化。
struct Foo
{
int a{};
}bar;
bar.a初始化为0
struct Foo
{
int a{0};
}bar;
bar.a初始化为0
所以构造2和3是相同的。 1是不同的。
有关详细信息,您可能需要阅读Initialization和Class Member Initialization
答案 2 :(得分:1)
第一个是POD类型。成员a
初始化为0。