我有一个结构定义为:
typedef struct s non_t;
struct s {
char tName;
int rCount;
};
然后我将其初始化为:
non_t *s = new non_t();
//s->tName = ???
//s->rCount = ???
所以在这里,s->tName
和s->rCount
的值被初始化为什么?他们null
还在吗?我想写一些像:
s->rCount = s->rCount + 1
但为了使其正常工作,我需要将s->rCount
初始化为0 ...我想我只是对struct
初始化真正起作用感到困惑?
答案 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)
int
和char
不能是null
。如果没有初始化它们的构造函数,则值将是未定义的。
struct s
{
s() : rCount(0) {}
char tName;
int rCount;
};
这会将rCount
初始化为零。
答案 3 :(得分:1)
在C ++中,struct
的工作方式与class
完全相同,但默认情况下所有字段均为public
。您可以创建构造函数,使用您想要的任何默认值初始化您的结构。