为什么std::bitset::reference::operator~?
Why std::bitset::reference::operator~?
我正在阅读 std::bitset
的 documentation 我想知道为什么 std::bitset::reference
明确定义 operator~
因为我没有看到任何性能或设计原因。没有它,我认为它会同样有效:
bool b = ~mybitset[i];
因为引用将被转换为布尔值,将对其应用 ~
运算符。
对这个设计决定有什么解释吗?
由于整数提升,~true
是 ~1
,当转换回 bool
时,它肯定是非零的,因此不是 false
。
bool b = true;
b = ~b;
b
这个操作后的值为true
!
这是因为 ~
将值 1 的 bool
提升为 int
,然后对结果执行按位非运算,解析为 -2,然后将其强制转换回到 bool
这是真的。
因此它必须提供一个运算符,以便结果如您所愿。
我正在阅读 std::bitset
的 documentation 我想知道为什么 std::bitset::reference
明确定义 operator~
因为我没有看到任何性能或设计原因。没有它,我认为它会同样有效:
bool b = ~mybitset[i];
因为引用将被转换为布尔值,将对其应用 ~
运算符。
对这个设计决定有什么解释吗?
由于整数提升,~true
是 ~1
,当转换回 bool
时,它肯定是非零的,因此不是 false
。
bool b = true;
b = ~b;
b
这个操作后的值为true
!
这是因为 ~
将值 1 的 bool
提升为 int
,然后对结果执行按位非运算,解析为 -2,然后将其强制转换回到 bool
这是真的。
因此它必须提供一个运算符,以便结果如您所愿。