如果 std::vector<bool> 被重写以使用标准向量实现,这将如何破坏旧软件?

Jer*_*ner 6 c++ boolean vector backwards-compatibility

根据这个问题的答案,std::vector<bool>实现“特殊”逻辑(允许每个布尔值存储在单个位中,而不是占用整个字节),因此,它并不能完全满足因此不鼓励使用 STL 容器及其使用。然而,出于向后兼容性的原因,保留了“特殊”逻辑。

我的问题是,如果 C++ 实现者抛弃“特殊”逻辑并变成模板std::vector<bool>的另一种专门化std::vector,这会导致什么向后兼容性问题?即旧软件可能依赖的某些特殊行为是否需要保留位打包实现?(我唯一能想到的是,RAM 受限环境中的一些旧软件可能依赖内存使用量减少八倍才能运行,但这在大多数情况下似乎是一个相对较小的问题)

Ayx*_*xan 3

首先,这将是 ABI 中断。从标准库中更改任何内容都很困难的一个主要原因。

其次,任何使用flip都会破坏:

#include <vector>

int main() {
  std::vector<bool> vec { true };
  vec[0].flip(); // can't be done with regular bool
}
Run Code Online (Sandbox Code Playgroud)

第三,由于某人可能依赖的重载解析,可能会出现其他问题。


旁注:您始终可以使用boost::container::vector它来代替,它不是专门用于bool.