为了账号安全,请及时绑定邮箱和手机立即绑定

是否默认将C ++结构的成员初始化为0?

是否默认将C ++结构的成员初始化为0?

C++
弑天下 2019-09-19 09:05:44
我有这个struct:struct Snapshot{     double x;      int y;};我希望x并且y为0.默认情况下它们是0还是我必须这样做:Snapshot s = {0,0};将结构归零的其他方法是什么?
查看完整描述

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,调用用户定义的默认构造函数具有用户声明的构造函数的类型,...)。这非常重要,特别是如果您的结构是模板。


查看完整回答
反对 回复 2019-09-19
?
温温酱

TA贡献1752条经验 获得超4个赞

不,默认情况下它们不是0。确保所有值或默认为0的最简单方法是定义构造函数

Snapshot() : x(0), y(0) {}

这可确保快照的所有使用都具有初始化值。


查看完整回答
反对 回复 2019-09-19
?
慕尼黑的夜晚无繁华

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

}


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 531 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信