按照C++标准,下面三种结构体定义有区别吗?
struct Foo
{
int a;
};
struct Foo
{
int a{};
};
struct Foo
{
int a{0};
};
最后两个是C++11。
最佳答案
给定第一个定义,如果您创建一个具有自动存储持续时间的 Foo
实例,a
将被取消初始化。您可以执行聚合初始化来初始化它。
Foo f{0}; // a is initialized to 0
Foo
的第二个和第三个定义都将数据成员a
初始化为0
。
在 C++11 中,2 和 3 都不是 aggregates , 但 C++14 changes that rule因此尽管添加了 brace-or-equal-initializer,它们仍保持聚合。
关于c++ - 非静态数据成员初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27937167/