我會通過一些VC++代碼,在一個大的代碼庫和跨越這來了:什麼是&=和| =
if (nState & TOOL_TIPS_VISIBLE)
nState &= ~TOOL_TIPS_VISIBLE;
else
nState |= TOOL_TIPS_VISIBLE;
break;
是否有這樣的運營商如& =或| =在C++?它是爲了什麼?
這相當於nState = nState & ~TOOL_TIPS_VISIBLE
嗎?
我會通過一些VC++代碼,在一個大的代碼庫和跨越這來了:什麼是&=和| =
if (nState & TOOL_TIPS_VISIBLE)
nState &= ~TOOL_TIPS_VISIBLE;
else
nState |= TOOL_TIPS_VISIBLE;
break;
是否有這樣的運營商如& =或| =在C++?它是爲了什麼?
這相當於nState = nState & ~TOOL_TIPS_VISIBLE
嗎?
x &= y
相同x = x & y
x |= y
相同x = x | y
不一定正確,請參閱我的答案。 –
x &= y
意味着x = x & y
。所以是的,你是對的。
是的。 &=
是&
什麼+=
是+
及其按位和或
在第一種情況下的標誌(位)被斷開
nState &= ~TOOL_TIPS_VISIBLE
在標記被打開
第二殼體nState |= TOOL_TIPS_VISIBLE
x &= y;
相當於:
x = x & y;
以同樣的方式,
x|= y;
等同於:
x = x | y;
&
和|
類似於&&
和||
,只有他們工作在按位時尚。所以現在你可以想象&=
和|=
的作用類似於+=
。那是x &= y; ==> x = x & y;
什麼沒有提到的是&=
和|=
運算符可以被重載。因此,你發佈的代碼取決於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
。再一次,極不可能,但很好知道盡管如此。
所有其他答案可能適用於此,但這是值得考慮的。
答案可能不像這樣直截了當(儘管很可能是這樣)。我添加了一些您可能會覺得有用的信息。 –