为什么std::bitset::reference::operator~?

Why std::bitset::reference::operator~?

我正在阅读 std::bitsetdocumentation 我想知道为什么 std::bitset::reference 明确定义 operator~ 因为我没有看到任何性能或设计原因。没有它,我认为它会同样有效:

bool b = ~mybitset[i];

因为引用将被转换为布尔值,将对其应用 ~ 运算符。

对这个设计决定有什么解释吗?

由于整数提升,~true~1,当转换回 bool 时,它肯定是非零的,因此不是 false

bool b = true;
b = ~b;

b这个操作后的值为true!

这是因为 ~ 将值 1 的 bool 提升为 int,然后对结果执行按位非运算,解析为 -2,然后将其强制转换回到 bool 这是真的。

因此它必须提供一个运算符,以便结果如您所愿。