有没有标准的方法来替换 C 风格的 bool 数组?

Is there a standard way to replace a C-style bool array?

在这段代码中

void legacyFunction(int length, bool *bitset)
{
    // stuff, lots of stuff
}

int main()
{
    int somenumber = 6;
    // somenumber is set to some value here

    bool *isBitXSet = new bool[somenumber];
    // initialisation of isBitXSet.

    legacyFunction(somenumber, isBitXSet);

    delete[] isBitXSet;
    return 0;
}

我想用

之类的东西替换 bool *isBitXSet = new bool[somenumber];
std::vector<bool> isBitXset(somenumber, false);

但是我做不到

legacyFunction(somenumber, isBitXSet.data());

因为 data() 对于 std::vector<bool> 不存在。而且我无法更改 legacyFunction().

的界面

是否有 C 风格的 bool 数组的替代方案?

您可以使用 std::unique_ptr<T[]> and std::make_unique:

int main()
{
    int somenumber = 6;
    // somenumber is set to some value here

    auto isBitXSet = std::make_unique<bool[]>(somenumber);    
    // initialisation of isBitXSet.

    legacyFunction(somenumber, isBitXSet.get());

    return 0;
}

或者,您可以 "trick" std::vector 通过创建自己的 bool 包装器:

struct my_bool { bool _b; };
std::vector<my_bool> v; // will not use `vector<bool>` specialization

如果您在编译时知道数组的大小,请考虑使用 std::array