C ++,bool数组没有正确初始化

时间:2016-06-21 02:46:16

标签: c++ arrays initialization

我对C ++很陌生,所以请原谅我,如果这个错误是愚蠢的。我目前正在研究一个类,它可以保存单个字符(每个字符只有一个)并执行一些简单的操作。 我遇到的问题似乎是在类的构造函数中。因为我只有字符,所以我使用的是大小为256的bool数组。所以,如果我想在我的数组中添加字符“A”,我只需将数组[64]翻转为1。

要以我想要的方式使用数组,我为每个索引用零初始化它。所以它看起来像这样:

Set<char>::Set() {
  bool _elements[256] = {0};
}

如果我现在检查成员变量_elements的所有值,它不仅包含零。我不知道是什么原因引起的。没有其他函数调用或其间的任何内容。

Set set;
for (int i = 0; i < 256; i++) { printf("%d\n", set._elemens[i]; }

2 个答案:

答案 0 :(得分:4)

您正在构造函数中初始化局部变量_elements,它将在离开构造函数时被销毁,并且与成员变量_elemens无关。 (注意名称不一样。)

您可以按member initializer list初始化成员变量:

Set<char>::Set() : _elemens {0} {}

in-class brace-or-equal initializer(我不知道Set是如何宣布的,所以就像一个例子):

struct Set {
    bool _elemens[256] = {0};
};

正如@ M.M指出的那样,对于这两种情况,只有{}才能正常工作(所有元素都将设置为false)并且更适合您的情况。

答案 1 :(得分:1)

数组_elements是Set()构造函数的局部变量。你不应该能够在Set()构造函数之外访问它。

您想要使用它的方式,您需要_elements作为类Set的公共成员变量。