在MSVC 2010 C ++中,我将x和y显示为true,然后执行x& = y;导致x为假
我不能在调试器中重复。当我改为x = x&& Ÿ;然后结果如预期那样真实。
我应该更改代码还是深入挖掘 - 我正在维护一个针对多个编译器和多个处理器的大型遗留系统?
答案 0 :(得分:2)
& =是二进制AND。 &安培;&安培;是合乎逻辑的。
如果两个值都是bool
,那么它们应该相同。但我怀疑他们不是。
答案 1 :(得分:-1)
bool
不是基本类型。一般来说,它依赖于int
或char
,其中1为true
,0为false
,但它不是标准。“
如果x和y都是但是,MSVC只是说:bool
,则按位AND(&)和逻辑AND(&&)将导致与此实现相同的结果。
!false == true
!true == false
所以你可能会得到不同的结果。使用带有布尔运算的按位运算符是不好的设计。例如,将int
投射到bool
会生成警告C4800
(MSVC)。问题是从bool
到int
的转换始终是隐式的,您可以在它们上使用任何算术运算符。
auto s = true + true + true; // = 3
// std::is_same<decltype(s), int>::value is True
修改: mea culpa