调用Struct构造函数后初始化的值是什么?

时间:2016-03-03 22:03:12

标签: c++ struct constructor initialization

我有一个结构定义为:

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初始化真正起作用感到困惑?

4 个答案:

答案 0 :(得分:3)

当您在()中添加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;
};

答案 1 :(得分:2)

如果需要将其初始化为0,则应在构造函数中执行此操作。 :) 否则,它将被设置为它在其分配的任何随机存储器。

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

  char tName;
  int rCount;
};

答案 2 :(得分:2)

intchar不能是null。如果没有初始化它们的构造函数,则值将是未定义的。

struct s
{
  s() : rCount(0) {}
  char tName;
  int rCount;
}; 

这会将rCount初始化为零。

答案 3 :(得分:1)

在C ++中,struct的工作方式与class完全相同,但默认情况下所有字段均为public。您可以创建构造函数,使用您想要的任何默认值初始化您的结构。