我有这样的结构:
struct Snapshot
{
double x;
int y;
};
我想让x和y等于0。它们是默认为0还是我必须这样做:
Snapshot s = {0,0};
还有什么方法可以把结构归零呢?
我有这样的结构:
struct Snapshot
{
double x;
int y;
};
我想让x和y等于0。它们是默认为0还是我必须这样做:
Snapshot s = {0,0};
还有什么方法可以把结构归零呢?
当前回答
如果不初始化结构,则它们不为空。
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()来初始化它们而不考虑它们的类型:这就是值初始化,通常会产生一个合适的初始值(int为0,double为0.0,对于用户定义的具有用户声明的构造函数的类型调用默认构造函数,…)如果你的结构是模板,这一点尤其重要。
其他回答
一般来说,没有。然而,在函数/中声明为文件作用域或静态作用域的结构体将被初始化为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
}
不,默认不为0。确保所有值或默认值为0的最简单方法是定义一个构造函数
Snapshot() : x(0), y(0) {
}
这确保了Snapshot的所有使用都有初始化的值。
在c++中,使用无参数构造函数。在C语言中,你不能有构造函数,所以使用memset或者——有趣的解决方案——指定初始化器:
struct Snapshot s = { .x = 0.0, .y = 0.0 };
我知道这个问题已经非常老了,但是这个问题突然出现在谷歌上,我找到了另一种方式,我想我应该把它加在这里:
Snapshot s {};
我不确定这个语法需要哪个C/ c++语言版本。
如果不初始化结构,则它们不为空。
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()来初始化它们而不考虑它们的类型:这就是值初始化,通常会产生一个合适的初始值(int为0,double为0.0,对于用户定义的具有用户声明的构造函数的类型调用默认构造函数,…)如果你的结构是模板,这一点尤其重要。