| =运算符在C++中的含义是什么?

Jef*_*eff 7 c++ operators

| =运算符在C++中的含义是什么?

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只评估一次.请注意这里的括号 - 它显示了分组的工作原理.

  • 虽然一个特别邪恶的类可以实现`| =`来做它想要的任何事情.通常,它会以您在此处显示的直观方式实现`|`和`| =`. (2认同)