C++二元运算符优先级顺序

4
以下参数在C++中按照什么顺序进行测试?
if (a || b && c)
{
}

我刚看到我们应用程序中的这段代码,我讨厌它,我想添加一些括号来澄清顺序。但是在我确定添加到正确的位置之前,我不想添加括号。
编辑:已接受的答案和后续
此链接提供了更多信息,但并不完全清楚它的含义。看起来 || 和 && 优先级相同,在这种情况下,它们从左到右进行评估。

http://msdn.microsoft.com/en-us/library/126fe14k.aspx

5个回答

7

4

来自这里

a || (b && c)

这是默认的优先级。

1
C++的优先级不可定制,因此“默认”是多余的。 - C. K. Young
我的意思是,“default”指的是“非括号形式”的。 - tzot

2

&&(布尔AND)的优先级高于||(布尔OR)。因此以下内容相同:

a || b && c
a || (b && c)

一个好的记忆规则是:AND(与)就像乘法,OR(或)就像加法。如果我们用*代替AND,用+代替OR,那么我们得到一个更为熟悉的等价式:

a + b * c
a + (b * c)

实际上,在布尔逻辑中,AND和OR的作用类似于这些算术运算符:

a  b   a AND b   a * b   a OR b   a + b
---------------------------------------
0  0      0        0       0        0
0  1      0        0       1        1
1  0      0        0       1        1
1  1      1        1       1        1(实际上是2,但我们假装是1)

0
回答后续问题:显然,MSDN上的表格是有误的,可能是由于某些人无法制作出体面的HTML表格(或使用Microsoft工具生成它!)。我想它应该看起来更像Rodrigo引用的维基百科表格,其中我们有清晰的子部分。但显然,被接受的答案是正确的,某种程度上,我们与&&和||的优先级相同,就像*和+一样。你给出的片段对我来说很清楚明了,但我想添加括号也不会有什么坏处。

-2

我不确定,但你应该很容易找出来。

只需创建一个小程序,其中包含一个语句,打印出以下表达式的真值: (true || false && true)

如果结果为true,则||比&&具有更高的优先级;如果结果为false,则相反。


我认为你的意思是 (true || false && false) 因为你当前的示例似乎无论优先级如何总是为真。 - workmad3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接