按照什么顺序以下参数测试(在C ++)?
if (a || b && c)
{
}
我刚看到在我们的应用程序的代码,我恨它,我想添加一些括号只是澄清排序。 但我不希望添加括号,直到我知道我加入他们在正确的地方。
编辑:接受的答案及跟进
此链接有更多的信息,但它不是完全清楚这意味着什么。 这似乎|| 和&&是相同的优先级,在这种情况下,他们正在评估左到右。
http://msdn.microsoft.com/en-us/library/126fe14k.aspx
按照什么顺序以下参数测试(在C ++)?
if (a || b && c)
{
}
我刚看到在我们的应用程序的代码,我恨它,我想添加一些括号只是澄清排序。 但我不希望添加括号,直到我知道我加入他们在正确的地方。
编辑:接受的答案及跟进
此链接有更多的信息,但它不是完全清楚这意味着什么。 这似乎|| 和&&是相同的优先级,在这种情况下,他们正在评估左到右。
http://msdn.microsoft.com/en-us/library/126fe14k.aspx
从这里 :
a || (b && c)
这是默认的优先级。
[ http://www.cppreference.com/wiki/operator_precedence] (由谷歌搜索“C ++运算符优先级”实测值)
这页告诉我们&&,在组13,优先级高于|| 在组14中,所以表达式是等效于|| (B && c)中。
不幸的是,维基百科的文章[ http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence]不同意这一点,但因为我有我的办公桌上的C89标准,它与第一个站点同意,我要去修改维基百科的文章。
&&(布尔AND)的优先级高于|| (布尔OR)。 因此,以下是相同的:
a || b && c
a || (b && c)
一个好的记忆规则是要记住这一点,就像乘法和OR就像是加法。 如果我们带*号,并用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)
要回答后续:(!或使用微软工具来生成它)明显在MSDN上的表拙劣,也许有人无法做一个像样的HTML表格。
我想它应该看起来更像罗德里戈,我们有明确的小节引用维基百科的表。
但显然接受的答案是正确的,在某种程度上我们有相同的优先级与&&和|| 比*和+,例如。
你给我的片段是清晰和明确的对我,但我想加括号不会伤害任何。
我不知道,但它应该很容易为你找到答案。
只要创建一个小程序与打印出的真值的语句:(真||假&&真)
如果结果为真,那么|| 比&&优先级高,如果是falase,它周围的其他方法。