Jon*_*ler 27
假设您在整数上使用内置运算符,或者对用户定义的类使用sanely重载运算符,这些都是相同的:
a = a | b;
a |= b;
Run Code Online (Sandbox Code Playgroud)
' |='符号是按位OR赋值运算符.它计算RHS('b')与LHS('a')的OR值,并将结果赋给'a',但它只评估'a'一次.
'| ='运算符的一大优势是'a'本身就是一个复杂的表达式:
something[i].array[j]->bitfield |= 23;
Run Code Online (Sandbox Code Playgroud)
VS:
something[i].array[i]->bitfield = something[i].array[j]->bitfield | 23;
Run Code Online (Sandbox Code Playgroud)
是故意还是偶然的差异?
...
答案:故意 - 显示速记表达的优点......第一个复杂的表达式实际上相当于:
something[i].array[j]->bitfield = something[i].array[j]->bitfield | 23;
Run Code Online (Sandbox Code Playgroud)
类似的评论适用于所有复合赋值运算符:
+= -= *= /= %=
&= |= ^=
<<= >>=
Run Code Online (Sandbox Code Playgroud)
任何复合运算符表达:
a XX= b
Run Code Online (Sandbox Code Playgroud)
相当于:
a = (a) XX (b);
Run Code Online (Sandbox Code Playgroud)
除了a只评估一次.请注意这里的括号 - 它显示了分组的工作原理.
x |= y
Run Code Online (Sandbox Code Playgroud)
与...一样
x = x | y
Run Code Online (Sandbox Code Playgroud)
与...一样
x = x [BITWISE OR] y
Run Code Online (Sandbox Code Playgroud)