C++,布尔数组未正确初始化

Posted

技术标签:

【中文标题】C++,布尔数组未正确初始化【英文标题】:C++, bool array not properly initialised 【发布时间】:2016-06-21 02:46:15 【问题描述】:

我对 C++ 很陌生,如果错误很愚蠢,请原谅我。我目前正在研究一个可以保存单个字符(每个字符只有一个)并进行一些简单操作的类。 我遇到的问题似乎出在类的构造函数中。因为我只有字符,所以我使用大小为 256 的布尔数组。所以如果我想将字符“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]; 

【问题讨论】:

bool _elements[256] = 0; 仅初始化第一个值。如果要初始化所有数组,则必须使用 memset C 函数的迭代并设置为 0 @fnc12 err no,所有都设置为零(false,特别是在这种情况下) 【参考方案1】:

你在构造函数内部初始化了一个局部变量_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)并且更适合您的情况。

【讨论】:

【参考方案2】:

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

你想使用它的方式,你需要_elements是一个公共成员变量到类Set。

【讨论】:

以上是关于C++,布尔数组未正确初始化的主要内容,如果未能解决你的问题,请参考以下文章

valgrind 抱怨 C++ 结构上的未初始化字节

c++如何定义布尔型数组使其初始值为true?

c++如何定义布尔型数组使其初始值为true?

数组未在 C++ 中使用花括号进行初始化

为啥 int 数组在 C++ 中未初始化为零?

在 C++ 中的数组中未默认初始化的索引范围