为什么 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 |= b
与a = (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)。
1)为什么没有像有和差赋值那样的逻辑运算符赋值?
bool a = true;
bool b = false;
a = a || b;
a ||= b; // syntax error!
a |= b; // OK.
2) 对布尔变量应用按位运算符是什么意思? 它与使用逻辑运算符一样吗?
a |= b
与a = (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)。