我在一个大型代码库中浏览了一些VC ++代码并遇到了这个问题:
if (nState & TOOL_TIPS_VISIBLE)
nState &= ~TOOL_TIPS_VISIBLE;
else
nState |= TOOL_TIPS_VISIBLE;
break;
在C ++中是否有& =或| =这样的运算符?它的用途是什么?
它等同于nState = nState & ~TOOL_TIPS_VISIBLE
吗?
答案 0 :(得分:10)
x &= y
与x = x & y
相同
x |= y
与x = x | y
答案 1 :(得分:7)
未提及的是&=
和|=
运算符都可以重载。因此,您发布的代码取决于nState的类型(虽然它显然是一个int,所以很可能这不适用于此)。重载&=
不会隐式重载&
,所以在这种情况下
x &= y might not be the same as x = x & y
它可能还取决于TOOL_TIPS_VISIBLE
是什么。
struct s{
int x;
};
void operator &= (int& x, s y)
{
x = 0;
}
现在每当你这样做:
s TOOL_TIPS_VISIBLE;
x &= TOOL_TIPS_VISIBLE;
x
将成为0
。再一次,极不可能,但很高兴知道。
所有其他答案可能适用于此,但这值得考虑。
答案 2 :(得分:3)
它的按位和或
在第一种情况下,标志(位)关闭
nState &= ~TOOL_TIPS_VISIBLE
在第二种情况下,标志打开
nState |= TOOL_TIPS_VISIBLE
答案 3 :(得分:2)
x &= y
表示x = x & y
。所以是的,你是对的。
答案 4 :(得分:2)
是。 &=
&
是+=
到+
答案 5 :(得分:1)
x &= y;
相当于:
x = x & y;
以同样的方式,
x|= y;
相当于:
x = x | y;
答案 6 :(得分:1)
&
和|
与&&
和||
类似,只是按位方式工作。现在您可以想象&=
和|=
的工作方式类似于+=
。那是x &= y; ==> x = x & y;