[英]Logical Operators and their precedence in C/C++
我最近遇到了一段代码
//克服零除的程序
int a=0;
int b=100;
int c= a==0 || b/a ;
printf("Hello");
//输出:你好
我的理论:根据优先级,运算符/的优先级高于||。 因此,b / a必须首先执行,我们应该遇到运行时错误。
我认为发生的事情是:
短路运算符|| ,计算LHS a == 0,这是正确的,因此不执行b / a。
我的理论错了吗? 我很确定这是一件很简单的事,我现在不知道
优先级并不意味着评估顺序,仅表示分组(括号)。
||
的第一个操作数确定之后有一个序列点(用旧的说法) ,因此||
的第一个操作数 无论这些操作数是什么,都必须在第二个之前评估。 因为在这种情况下,表达式a == 0 || b/a
的整体结果a == 0 || b/a
a == 0 || b/a
由第一个操作数确定,而第二个则完全不评估。
/
||
的较高优先级 表示该表达式的计算结果为:
int c= (a==0) || (b/a) ;
并不是
int c= (a==0 || b)/a ;
但是仍然,由于逻辑评估被短路,只有当a!=0
时才评估b/a
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.