Jer*_*ner 6 c++ boolean vector backwards-compatibility
根据这个问题的答案,std::vector<bool>实现“特殊”逻辑(允许每个布尔值存储在单个位中,而不是占用整个字节),因此,它并不能完全满足因此不鼓励使用 STL 容器及其使用。然而,出于向后兼容性的原因,保留了“特殊”逻辑。
我的问题是,如果 C++ 实现者抛弃“特殊”逻辑并变成模板std::vector<bool>的另一种专门化std::vector,这会导致什么向后兼容性问题?即旧软件可能依赖的某些特殊行为是否需要保留位打包实现?(我唯一能想到的是,RAM 受限环境中的一些旧软件可能依赖内存使用量减少八倍才能运行,但这在大多数情况下似乎是一个相对较小的问题)
首先,这将是 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.