test1() && test2() != test3();
在此示例中,尽管!=
的优先级比&&
高,评估的顺序始终是:如果test1()
,则test2 != test3()
。
为什么c ++ &&运算符需要优先级?您能否提供一个示例,其中运算符显示其严谨性而不是评估?
答案 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操作,以便首先执行左操作数,然后执行第二个运算符(如果左结果为假,则完全不执行)。