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++,布尔数组未正确初始化的主要内容,如果未能解决你的问题,请参考以下文章