【问题标题】:C++, bool array not properly initialisedC++,布尔数组未正确初始化
【发布时间】: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,特别是在这种情况下)

标签: c++ arrays initialization


【解决方案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。

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多