非静态数据成员初始化
Non-static data member initialization
根据C++标准,以下三种结构体定义有区别吗?
struct Foo
{
int a;
};
struct Foo
{
int a{};
};
struct Foo
{
int a{0};
};
最后两个是C++11。
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 and Class Member Initialization
根据第一个定义,如果您创建一个具有自动存储持续时间的 Foo
实例,a
将不会被初始化。您可以执行聚合初始化来初始化它。
Foo f{0}; // a is initialized to 0
Foo
的第二个和第三个定义都会将数据成员a
初始化为0
。
在 C++11 中,2 和 3 都不是 aggregates, but C++14 changes that rule,因此尽管添加了 brace-or-equal-initializer.
第一个是POD型。成员 a
由 0.
初始化
根据C++标准,以下三种结构体定义有区别吗?
struct Foo
{
int a;
};
struct Foo
{
int a{};
};
struct Foo
{
int a{0};
};
最后两个是C++11。
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 and Class Member Initialization
根据第一个定义,如果您创建一个具有自动存储持续时间的 Foo
实例,a
将不会被初始化。您可以执行聚合初始化来初始化它。
Foo f{0}; // a is initialized to 0
Foo
的第二个和第三个定义都会将数据成员a
初始化为0
。
在 C++11 中,2 和 3 都不是 aggregates, but C++14 changes that rule,因此尽管添加了 brace-or-equal-initializer.
第一个是POD型。成员 a
由 0.