静态bool数组不作为集合初始化



为什么我的静态布尔阵列不正确初始化?只有第一个是初始化的 - 我怀疑这是因为数组是静态的。

以下MWE是使用GCC编译的,是基于我写的功能,该功能已将其转移到一个主要程序中以说明我的问题。我尝试过有没有C 11。我的理解是因为此数组是静态的,并且初始化为True,这应该始终在我第一次输入功能时打印。因此,在此MWE中应该打印一次。

#include <iostream>
using namespace std;
const int arraysize = 10;
const int myIndex = 1;
static bool firstTimeOverall = true;
int main()
{
    static bool firstCloudForThisClient[arraysize] = {true};
    cout.flush();
    if (firstCloudForThisClient[myIndex])
    {
        cout << "I never get here" << endl;
        firstCloudForThisClient[myIndex] = false;
        if (firstTimeOverall)
        {
            firstTimeOverall = false;
            cout << "But think I would get here if I got in above" << endl;
        }
    }
    return 0;
}

您可能需要倒转条件才能利用默认初始化:

#include <iostream>
using namespace std;
const int arraysize = 10;
const int myIndex = 1;  // note this index does not access the first element of arrays
static bool firstTimeOverall = true;
int main()
{
    static bool firstCloudForThisClient[arraysize] = {}; // default initialise
    cout.flush();
    if (!firstCloudForThisClient[myIndex])
    {
        cout << "I never get here" << endl;
        firstCloudForThisClient[myIndex] = true; // Mark used indexes with true
        if (firstTimeOverall)
        {
            firstTimeOverall = false;
            cout << "But think I would get here if I got in above" << endl;
        }
    }
    return 0;
}
static bool firstCloudForThisClient[arraysize] = {true};

这将首次进入True的条目,以及所有其他条目。

if (firstCloudForThisClient[myIndex])

但是,由于 myIndex为1,并且数组索引基于零,因此访问 second 条目,这是FALSE。

您的使用array[size] = {true}在数组上仅初始化第一个元素,如果arraysize变量大于1,则其他元素的初始值取决于平台。我认为这是一种不确定的行为。

如果您确实需要启动数组,请改用循环:

for(int i=0; i < arraysize; ++i)
firstCloudForThisClient[i] = true;

您应该访问数组的第一个元素,请使用:

const int myIndex = 0;

相关内容

  • 没有找到相关文章

最新更新