3 回答
TA贡献1906条经验 获得超10个赞
如果不初始化结构,它们不为null。
Snapshot s; // receives no initialization
Snapshot s = {}; // value initializes all members
第二个将使所有成员为零,第一个将它们保留为未指定的值。请注意,它是递归的:
struct Parent { Snapshot s; };
Parent p; // receives no initialization
Parent p = {}; // value initializes all members
第二个将p.s.{x,y}为零。如果在结构中有构造函数,则不能使用这些聚合初始化列表。如果是这种情况,则必须为这些构造函数添加适当的初始化
struct Snapshot {
int x;
double y;
Snapshot():x(0),y(0) { }
// other ctors / functions...
};
将x和y初始化为0.请注意,您可以使用x(), y()初始化它们而忽略它们的类型:那就是值初始化,并且通常会产生一个正确的初始值(0表示int,0.0表示double,调用用户定义的默认构造函数具有用户声明的构造函数的类型,...)。这非常重要,特别是如果您的结构是模板。
TA贡献1752条经验 获得超4个赞
不,默认情况下它们不是0。确保所有值或默认为0的最简单方法是定义构造函数
Snapshot() : x(0), y(0) {}
这可确保快照的所有使用都具有初始化值。
TA贡献1864条经验 获得超6个赞
一般来说,没有。但是,在函数/中声明为文件范围或静态的结构将被初始化为0(就像这些范围的所有其他变量一样):
int x; // 0
int y = 42; // 42
struct { int a, b; } foo; // 0, 0
void foo() {
struct { int a, b; } bar; // undefined
static struct { int c, d; } quux; // 0, 0
}
- 3 回答
- 0 关注
- 531 浏览
添加回答
举报