wes*_*ton 11
a &= b;
Run Code Online (Sandbox Code Playgroud)
是相同的
a = a & b;
Run Code Online (Sandbox Code Playgroud)
&是"按位和运算符",搜索它.
它是一个速记操作符,允许您崩溃
a = a & b
Run Code Online (Sandbox Code Playgroud)
成
a &= b
Run Code Online (Sandbox Code Playgroud)
除了对整数进行逐位运算外,&=还可以在布尔值上使用,允许您折叠
a = a && b
Run Code Online (Sandbox Code Playgroud)
成
a &= b
Run Code Online (Sandbox Code Playgroud)
然而,在逻辑运算的情况下,扩展形式是短路的,而后者的折叠形式不会短路.
例:
让b()一个函数返回一个值,并做一些影响程序状态的东西
让它a成为一个布尔值false
如果你这样做
a = a && b()
Run Code Online (Sandbox Code Playgroud)
短路发生的情况:因为a是false没有必要评价b(以及可能发生的内额外的计算b()被跳过).
另一方面,如果你这样做
a &= b()
Run Code Online (Sandbox Code Playgroud)
短路不会发生:b在任何情况下都会被评估,即使a是false(并且评估b()不会改变逻辑结果),因此内部可能发生的任何额外计算b()都会被执行.