在遗留代码中,我遇到了以下表达式:
if (!m_bMsOcs && bChannelData || m_bMsOcs && !bStunType)
我想预期的条件是
if ((!m_bMsOcs && bChannelData) || (m_bMsOcs && !bStunType))
我不确定。原始条件表达式应该如何执行?请帮忙。
答案 0 :(得分:3)
if ( ((!m_bMsOcs) && bChannelData) || (m_bMsOcs && (!bStunType)) )
运营商优先级为!
> &&
> ||
答案 1 :(得分:3)
答案 2 :(得分:1)
逻辑and
的优先级高于or
:link
所以你对逻辑是正确的。
答案 3 :(得分:0)
正如其他人所说,由于C ++优先规则,这两个表达式是等价的。
这是一个真值表,可能有助于明确将会发生什么(我同意条件表达式比我喜欢的更复杂):
m_bMsOcs bChannelData bStunType Execute?
======== ============ ========= ========
0 0 0
0 0 1
0 1 0 Y
0 1 1 Y
1 0 0 Y
1 0 1
1 1 0 Y
1 1 1
请注意,表中的1
和0
只代表true
/ false
值(即变量的值不必为{{} 1}} - 任何非零值都将被视为1
)。我发现使用1
/ 0
代替1
/ T
,表格更具可读性。