假设您在整数上使用内置运算符,或在用户定义的类上使用合理重载的运算符,则这些运算符是相同的:
a = a | b;
a |= b;
The '|=
' 符号是按位或赋值运算符。它计算右侧(“b”)与左侧(“a”)的“或”值,并将结果分配给“a”,但在执行此操作时仅计算“a”一次。
“|=”运算符的一大优点是当“a”本身是一个复杂表达式时:
something[i].array[j]->bitfield |= 23;
vs:
something[i].array[i]->bitfield = something[i].array[j]->bitfield | 23;
这种差异是有意为之还是偶然?
...
答案:故意的 - 以显示简写表达式的优势...第一个复杂表达式实际上相当于:
something[i].array[j]->bitfield = something[i].array[j]->bitfield | 23;
类似的注释适用于所有复合赋值运算符:
+= -= *= /= %=
&= |= ^=
<<= >>=
任何复合运算符表达式:
a XX= b
相当于:
a = (a) XX (b);
除了那个a
仅评估一次。请注意此处的括号 - 它显示了分组的工作原理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)