【问题标题】:C++ Binary operators order of precedenceC++ 二元运算符的优先顺序
【发布时间】:2010-09-11 22:56:07
【问题描述】:

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

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

我刚刚在我们的应用程序中看到了这段代码,我讨厌它,我想添加一些括号来澄清排序。但在我知道我将它们添加到正确的位置之前,我不想添加括号。

编辑:接受的答案和跟进

此链接包含更多信息,但并不完全清楚其含义。看来||和 && 具有相同的优先级,在这种情况下,它们是从左到右计算的。

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

【问题讨论】:

    标签: c++ binary-operators


    【解决方案1】:

    来自here

    a || (b && c)
    

    这是默认优先级。

    【讨论】:

    • C++ 的优先级不可自定义,因此“默认”是多余的。
    • 我的意思是“默认”为“非括号”
    【解决方案2】:

    我不确定,但应该很容易找到。

    只需创建一个小程序,其中包含以下语句的真值: (真 || 假 && 真)

    如果结果为真,则 ||优先级高于&&,如果为falase,则反之。

    【讨论】:

    • 我认为您的意思是 (true || false && false),因为无论优先顺序如何,您当前的示例似乎总是正确的。
    【解决方案3】:

    [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 标准并且它与第一个站点一致,我将修改维基百科文章。

    【讨论】:

      【解决方案4】:

      回答后续问题:显然 MSDN 上的表格是拙劣的,可能是有人无法制作像样的 HTML 表格(或使用 Microsoft 工具生成它!)。
      我想它应该看起来更像 Rodrigo 引用的 Wikipedia 表格,其中我们有明确的小节。
      但显然公认的答案是正确的,不知何故,我们与 && 和 || 具有相同的优先级例如,与 * 和 + 相比。
      你给出的 sn-p 对我来说是清晰明确的,但我想添加括号也不会造成伤害。

      【讨论】:

        【解决方案5】:

        && (boolean AND) 的优先级高于 || (布尔或)。因此以下是相同的:

        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)

        【讨论】:

          猜你喜欢
          • 2014-11-03
          • 2016-12-31
          • 2015-07-19
          • 1970-01-01
          • 2014-07-28
          • 1970-01-01
          • 2014-03-25
          • 2013-02-24
          • 2017-06-02
          相关资源
          最近更新 更多