我正在阅读std::bitset
的{{3}},我想知道为什么std::bitset::reference
明确定义operator~
,因为我没有看到任何性能或设计原因。没有它,我认为它同样有效:
bool b = ~mybitset[i];
因为引用将转换为bool,将在其上应用~
运算符。
对此设计决定的任何解释?
答案 0 :(得分:7)
bool b = true;
b = ~b;
此操作后b
的值为true
!
这是因为~
将bool
提升为值{1}的int
,然后对结果执行按位 - 不执行,结果为-2,然后将其强制转换为-2 bool
这是真的。
因此,它必须提供一个操作符,以便结果符合您的预期。
答案 1 :(得分:3)
由于整体促销活动,~true
为~1
,当转换回false
时,bool
绝对非零,因此不是source/index.html.erb
。