4

这:

if (A || B) { X; }
if (C && D) { X; }
if (F != G && H + I === J) { X; }

可以替换为:

if ((A || B) || (C && D) || (F != G && H + I === J)) { X; }

但是可以替换为:

if (A || B || C && D || F != G && H + I === J) { X; }

? (不带括号)

语言之间有什么区别吗?

PS:答案不应该基于这些例子。

4

4 回答 4

6

一,如果这些有副作用,这都是无效的。

第二,只有当 X 是幂等的,这是一种花哨的说法,如果 X 可以被调用两次而第二次没有变化。

http://en.cppreference.com/w/cpp/language/operator_precedence

&&绑定比 紧密,所以是的,您可以在这种情况下||丢弃括号。&&我认为运算符优先规则适用于任何拥有它们的语言,我不知道任何反例,并且您询问的语言确实遵循 C 运算符优先规则。

于 2012-08-09T02:51:31.177 回答
1

根据这个:

http://en.cppreference.com/w/cpp/language/operator_precedence

几乎所有事情都优先于 || 所以是的,它应该仍然有效。

这也应该适用于 Java,为什么?

于 2012-08-09T02:52:22.690 回答
1

您的第一个等价语句至少在 C++ 中是不正确的。这

if(A||B){X;}
if(C&&D){X;}
if(F!=G&&H+I==J){X;}

X如果多个条件为真,则可以执行多次。此外,上述保证至少评估A,C和. 同时这FG

if((A||B) || (C&&D) || (F!=G&&H+I===J)){X;}

保证X只执行一次,并且只保证至少评估A.

于 2012-08-09T02:57:19.180 回答
0

是的,它并没有显示出太大的区别,因为 && 具有比 || 更高的优先级

于 2012-08-09T02:58:58.353 回答