为什么 C/C++ 中缺少逻辑运算符(&&= 和 ||=)的赋值?

Why assignment by Logical Operators ( &&= and ||= ) is missing in C/C++?

1)为什么没有像有和差赋值那样的逻辑运算符赋值?

bool a = true;
bool b = false;
a = a || b;
a ||= b; // syntax error!
a |= b;   // OK.

2) 对布尔变量应用按位运算符是什么意思? 它与使用逻辑运算符一样吗?

a |= ba = (a | b) 的意思相同,只是 a 的地址只计算一次。然后,您查找升级规则和分配给 bool 的规则。

确实&&=||=是"missing"来自C的。我认为一个原因是C中的逻辑AND和OR进行了短路,这会有点缩写形式很奇怪。但是不要在它们的位置使用按位赋值运算符。相反,只需写:

a = a && b;
c = c || d;

如果您具有规范的 true/false 值(1 和 0),则按位运算符将起作用。但如果应用于非规范值,例如 5 和 2,您将得到不同的结果(5 && 2 为 1,但 5 & 2 为 0)。