为什么C ++ &&运算符需要优先级

时间:2019-07-12 18:07:53

标签: c++

test1() && test2() != test3();

在此示例中,尽管!=的优先级比&&高,评估的顺序始终是:如果test1(),则test2 != test3()

为什么c ++ &&运算符需要优先级?您能否提供一个示例,其中运算符显示其严谨性而不是评估?

2 个答案:

答案 0 :(得分:3)

这个问题很容易引起误解,我花了一段时间才了解OP的要求。当优先级规则应用于此语句,并且!=的优先级高于&&时,表示

test1() && test2() != test3();

在语义上等同于

test1() && (test2() != test3());

而不是

(test1() && (test2()) != test3();

但是,具有适当的短路规则,编译器将首先执行test1(),而发现错误时,将不会执行test2()test3()。这并不意味着不遵循优先规则。

答案 1 :(得分:2)

!=的较高优先级意味着

test1() && test2() != test3()

等同于表达式的主要top操作

test1() && (test2() != test3())

而不是

(test1() && test2()) != test3()

因此,这是subexpr1 && subexpr2形式的表达式。 !=操作在第二个子表达式中。指定逻辑AND操作,以便首先执行左操作数,然后执行第二个运算符(如果左结果为假,则完全不执行)。