x& = y相当于x = x&&如果两者都是c ++ bool

时间:2014-02-21 17:45:15

标签: c++

在MSVC 2010 C ++中,我将x和y显示为true,然后执行x& = y;导致x为假

我不能在调试器中重复。当我改为x = x&& Ÿ;然后结果如预期那样真实。

我应该更改代码还是深入挖掘 - 我正在维护一个针对多个编译器和多个处理器的大型遗留系统?

2 个答案:

答案 0 :(得分:2)

& =是二进制AND。 &安培;&安培;是合乎逻辑的。

如果两个值都是bool,那么它们应该相同。但我怀疑他们不是。

答案 1 :(得分:-1)

bool不是基本类型。一般来说,它依赖于intchar,其中1为true,0为false,但它不是标准。“

<罢工>

如果x和y都是bool,则按位AND(&amp;)和逻辑AND(&amp;&amp;)将导致与此实现相同的结果。但是,MSVC只是说:

!false == true
!true == false

所以你可能会得到不同的结果。使用带有布尔运算的按位运算符是不好的设计。例如,将int投射到bool会生成警告C4800(MSVC)。问题是从boolint的转换始终是隐式的,您可以在它们上使用任何算术运算符。

auto s = true + true + true; // = 3
// std::is_same<decltype(s), int>::value is True

修改 mea culpa