我有一个结构定义为:

typedef struct s non_t;

struct s {
 char tName;
 int rCount;
};


然后我像这样初始化它:

non_t *s = new non_t();
//s->tName = ???
//s->rCount = ???


所以在这里,s->tNames->rCount的值初始化为什么?他们还是null吗?我想像这样的东西:

s->rCount = s->rCount + 1


但是为了使它正常工作,我需要将s->rCount初始化为0 ...我想我只是对struct初始化的工作原理感到困惑?

最佳答案

()中添加new non_t()时,成员将为value initialized,因此您的情况下成员将具有值0

使用new non_t,成员将是default initialized,因此在您的情况下未初始化。

添加构造函数将避免这些微妙之处。

struct s {
  s() : tName('\0'), rCount(0) {}

  char tName;
  int rCount;
};


或在c ++ 11中

struct s {
  char tName = '\0';
  int rCount = 0;
};

09-06 07:06