在C ++中,| =运算符是什么意思?
答案 0 :(得分:25)
假设您在整数上使用内置运算符,或者对用户定义的类使用了明确重载的运算符,这些都是相同的:
a = a | b;
a |= b;
“|=
”符号是按位OR赋值运算符。它计算RHS('b')与LHS('a')的OR值,并将结果赋给'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
仅评估一次。请注意这里的括号 - 它显示了分组的工作原理。
答案 1 :(得分:8)
x |= y
与
相同x = x | y
与
相同x = x [BITWISE OR] y
答案 2 :(得分:3)
这是一个按位OR compound assignment。
与撰写x += y
以表示x = x + y
您可以将x |= y
写为x = x | y
,将x
和y
的所有位进行OR运算,然后将结果放在x
。< / p>
请注意它可以是overloaded,但对于基本类型,你应该没问题: - )
答案 3 :(得分:1)
您可以尝试使用SymbolHound: the search engine for programmers搜索SO等网站,以获取此类符号。以下是SymbolHound上的results for | =。 -Tom(联合创始人SH)