以下参数测试的顺序是什么(在C ++中)?
if (a || b && c)
{
}
我刚刚在我们的应用程序中看到了这个代码,我讨厌它,我想添加一些括号来澄清顺序。但我不想添加括号,直到我知道我将它们添加到正确的位置。
编辑:已接受的答案&跟进
此链接有更多信息,但并不完全清楚它的含义。好像||和&&是相同的优先级,在这种情况下,它们从左到右进行评估。
答案 0 :(得分:7)
[http://www.cppreference.com/wiki/operator_precedence](通过谷歌搜索“C ++运算符优先级”)
该页面告诉我们,第13组中的&&amp ;;优先级高于||在第14组中,表达式相当于|| (b&& c)。
不幸的是,维基百科文章[http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence]不同意这一点,但由于我的桌面上有C89标准并且它同意第一个网站,我将修改维基百科文章。
答案 1 :(得分:4)
答案 2 :(得分: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 really, but we pretend it's 1)
答案 3 :(得分:0)
回答后续问题:显然,MSDN上的表格很糟糕,可能是某些人无法做一个像样的HTML表格(或使用Microsoft工具来生成它!)。 我想它看起来应该更像Rodrigo引用的维基百科表,我们有明确的子部分 但很明显,接受的答案是正确的,不知何故,我们与&&和||例如,与*和+相比 你给的片段对我来说清晰明确,但我想加括号也不会伤害。
答案 4 :(得分:-2)
我不确定,但你应该很容易找到答案。
只需创建一个带有语句的小程序,该语句打印出以下内容的真值: (true || false&& true)
如果结果为真,那么||优先级高于&&,如果是falase,那就相反了。