为什么c没有\u0026\u0026 =或|| =布尔值?

有一个“very bad thing”可以发生&& =和|| =被用作bool的语法糖foo = foo&& bar和bool foo = foo ||酒吧?
布尔只能在C中为真或假。因此,使用& =和| =是完全安全的(即使我不是特别喜欢的符号)。真的,它们将执行位操作而不是逻辑操作(因此,它们不会短路),但是这些位操作遵循良好定义的映射,这有效地等同于逻辑操作,只要两个操作数确实是bool.1类型

与其他人在这里说的不同,C中的bool不能有不同的值,例如2.当将该值赋给bool时,它将根据标准转换为true。

将无效值赋给bool的唯一方法是在指针上使用reinterpret_cast:

int i = 2;
bool b = *reinterpret_cast<bool*>(&i);
b |= true; // MAY yield 3 (but doesn’t on my PC!)

但是由于这个代码导致未定义的行为,我们可以安全地忽略这个在符合C代码的潜在问题。

诚然,这是一个相当大的警告,如Angew的评论说明:

bool b = true;
b &= 2; // yields `false`.

原因是b& 2执行整数提升,使得该表达式等效于static_cast< int>(b)& 2,这导致0,然后将其转换回bool。因此,确实,操作符&的存在将提高类型安全性。

翻译自:https://stackoverflow.com/questions/2488406/why-doesnt-c-have-or-for-booleans

转载注明原文:为什么c没有\u0026\u0026 =或|| =布尔值?