【发布时间】:2011-05-12 04:36:34
【问题描述】:
|= 运算符在 C++ 中的含义是什么?
【问题讨论】:
|= 运算符在 C++ 中的含义是什么?
【问题讨论】:
假设您在整数上使用内置运算符,或者为用户定义的类使用重载的运算符,这些是相同的:
a = a | b;
a |= b;
“|=”符号是按位或赋值运算符。它计算 RHS ('b') 与 LHS ('a') 的 OR'ing 值并将结果分配给 'a',但这样做时它只计算 'a' 一次。
'|=' 运算符的一大优势在于,'a' 本身就是一个复杂的表达式:
something[i].array[j]->bitfield |= 23;
对比:
something[i].array[i]->bitfield = something[i].array[j]->bitfield | 23;
这种差异是有意的还是偶然的?
...
答案:故意——为了显示速记表达式的优势……复杂表达式中的第一个实际上相当于:
something[i].array[j]->bitfield = something[i].array[j]->bitfield | 23;
类似的 cmets 适用于所有复合赋值运算符:
+= -= *= /= %=
&= |= ^=
<<= >>=
任何复合运算符表达式:
a XX= b
相当于:
a = (a) XX (b);
除了a 只被评估一次。请注意此处的括号 - 它显示了分组的工作原理。
【讨论】:
|= 来做它想做的任何事情。通常,它会以您在此处显示的直观方式实现| 和|=。
something[i++].array[--j]->bitfield |= 23; 定义明确;如果它是手写的,你不能做增量或减量。 OTOH,我不确定这样一个复杂的表达式是不是一个好主意 - 但像 array[i++] |= 0x3C; 这样更简单的表达式是完全合理的。
& 作为他们的 IO 操作符,与流相似但不同。
x |= y
同
x = x | y
同
x = x [BITWISE OR] y
【讨论】:
这是一个按位或compound assignment。
就像你可以写x += y 来表示x = x + y一样
您可以将x |= y 写成x = x | y,将x 和y 的所有位进行或运算,然后将结果放入x。
注意它可以是overloaded,但对于基本类型你应该没问题:-)
【讨论】:
您可以尝试使用SymbolHound: the search engine for programmers 在 SO 之类的网站上搜索此类符号。这是 SymbolHound 上 |= 的 results。 -Tom(联合创始人 SH)
【讨论】: