优先的C ++二元运算次序(C++ Binary operators order of preced

2019-07-30 07:46发布

按照什么顺序以下参数测试(在C ++)?

if (a || b && c)
{
}

我刚看到在我们的应用程序的代码,我恨它,我想添加一些括号只是澄清排序。 但我不希望添加括号,直到我知道我加入他们在正确的地方。

编辑:接受的答案及跟进

此链接有更多的信息,但它不是完全清楚这意味着什么。 这似乎|| 和&&是相同的优先级,在这种情况下,他们正在评估左到右。

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

Answer 1:

从这里 :

a || (b && c)

这是默认的优先级。



Answer 2:

[ 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标准,它与第一个站点同意,我要去修改维基百科的文章。



Answer 3:

&&(布尔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)


Answer 4:

要回答后续:(!或使用微软工具来生成它)明显在MSDN上的表拙劣,也许有人无法做一个像样的HTML表格。
我想它应该看起来更像罗德里戈,我们有明确的小节引用维基百科的表。
但显然接受的答案是正确的,在某种程度上我们有相同的优先级与&&和|| 比*和+,例如。
你给我的片段是清晰和明确的对我,但我想加括号不会伤害任何。



Answer 5:

我不知道,但它应该很容易为你找到答案。

只要创建一个小程序与打印出的真值的语句:(真||假&&真)

如果结果为真,那么|| 比&&优先级高,如果是falase,它周围的其他方法。



文章来源: C++ Binary operators order of precedence