c++ - |= 运算符在 C++ 中意味着什么?

标签 c++ operators

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;

类似的注释适用于所有复合赋值运算符:

+= -= *= /= %=
&= |= ^=
<<= >>=

任何复合运算符表达式:

a XX= b

相当于:

a = (a) XX (b);

除了 a 只计算一次。请注意此处的括号 - 它显示了分组的工作方式。

关于c++ - |= 运算符在 C++ 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4217762/

相关文章:

c++ - Windows中的管道句柄如何关闭? (_pclose() 的 fclose())?

c++ - glGenerateMipmap- 找不到标识符?

c++ - 给出 BITS 的总和,找到该数字

macros - Nemerle OperatorAttribute 参数

javascript - 传播运算符 vs array.concat()

c++ - 我想使用 CMakeLists.txt 在我的代码中为 linux 和 windows 集成 ODBC 但它只能在 windows 中工作

c++ - 关于多线程环境下static const变量的使用

c++ - 创建自定义运算符 c++

c++ - 在 C++ 中正确重载 +

php - VB 的 "AndAlso"在 PHP 中的等价物是什么?