以什么顺序测试以下参数(在 C++ 中)?
if (a || b && c)
{
}
我刚刚在我们的应用程序中看到了这段代码,我讨厌它,我想添加一些括号来澄清排序。但是在我知道我将它们添加到正确的位置之前,我不想添加括号。
编辑:接受的答案和跟进
这个链接有更多信息,但它的含义并不完全清楚。看来|| 和 && 具有相同的优先级,在这种情况下,它们是从左到右计算的。
以什么顺序测试以下参数(在 C++ 中)?
if (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 标准并且它与第一个站点一致,我'我要修改维基百科的文章。
&& (boolean AND) 的优先级高于 || (布尔或)。因此以下是相同的:
a || b && c
a || (b && c)
一个好的助记规则是记住 AND 就像乘法,OR 就像加法。如果我们将 AND 替换为 * 并将 OR 替换为 +,我们会得到一个更熟悉的等价物:
a + b * c
a + (b * c)
实际上,在布尔逻辑中,AND 和 OR 的行为类似于以下算术运算符:
aba AND ba * ba OR ba + 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)
回答后续问题:显然 MSDN 上的表格是拙劣的,可能是有人无法制作像样的 HTML 表格(或使用 Microsoft 工具生成它!)。
我想它应该看起来更像 Rodrigo 引用的 Wikipedia 表格,其中我们有明确的小节。
但显然公认的答案是正确的,不知何故,我们与 && 和 || 具有相同的优先级 例如,与 * 和 + 相比。
您给出的片段对我来说是清晰明确的,但我想添加括号也不会造成伤害。
我不确定,但你应该很容易找到。
只需创建一个小程序,其中包含以下语句的真值: (true || false && true)
如果结果为真,则 || 优先级高于&&,如果是falase,则反之。