我有这个struct
struct Snapshot
{
double x;
int y;
};
我希望x
和y
为0。默认情况下它们是0,还是我必须这样做:
Snapshot s = {0,0};
还有什么其他方法可以将结构归零?
发布于 2009-07-01 15:00:34
如果你不初始化结构,它们就不是空的。
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中有构造函数,你就不能使用这些聚合初始化器列表。如果是这种情况,则必须向这些构造函数添加适当的初始化
struct Snapshot {
int x;
double y;
Snapshot():x(0),y(0) { }
// other ctors / functions...
};
将x和y都初始化为0。请注意,您可以使用x(), y()
来初始化它们,而不考虑它们的类型:这就是值初始化,通常会产生一个适当的初始值(0表示整型,0.0表示双精度型,为具有用户声明的构造函数的用户定义类型调用默认构造函数,...)。当你的结构是一个模板时,这一点尤其重要。
发布于 2009-07-01 15:00:38
不,默认情况下它们不是0。确保所有值或缺省值均为0的最简单方法是定义一个构造函数
Snapshot() : x(0), y(0) {
}
这可确保快照的所有使用都具有初始化值。
发布于 2009-07-01 15:07:55
一般来说,不是。但是,在函数/中声明为file-scope或static的结构将被初始化为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
}
https://stackoverflow.com/questions/1069621
复制相似问题