std :: vector <bool>优化实现

Sim*_*mon 8 c++ optimization boolean vector tdm-gcc

文档中,我可以看到std::vector<bool>通过使每个布尔占据一个位来优化空间效率.从文档:

std :: vector的空间效率(以及它是否完全优化)是实现定义的方式.

这是否意味着它取决于编译器的实现?如果是,我在哪里可以检查我的编译器是否支持它?他们为什么不希望它得到支持?这似乎是一个非常简单而有效的实现.

如果没有,它意味着什么,如果我希望进行这种优化,它意味着什么?

我正在使用TDM GCC工具集.

MSa*_*ers 2

正式的语言定义不想排除合理的实现,因此它们总是必须小心一点。

例如,典型的调试版本仍然符合标准,但我很容易看到vector<bool>在调试模式下没有被压缩。

现在这不是未指定的,而是已定义的实现。这意味着它是否被压缩应该在编译器文档中的某个地方,但标准没有描述文档应该如何组织。

如果您的编译器不支持它,您可以使用另一个库(Boost 是明显的候选者)。vector<bool>通常不是一个依赖于深层编译器魔法的类,因此替代方案很容易编写。