Des*_*Ice 4 c c++ operators logical-operators
我最近遇到了一段代码
//程序克服除零
int a=0;
int b=100;
int c= a==0 || b/a ;
printf("Hello");
Run Code Online (Sandbox Code Playgroud)
//输出:你好
我的理论:根据优先级,operator /优先级高于||.所以b/a必须首先执行,我们应该得到一个运行时错误.
我假设发生的事情是:
短路运算符|| ,评估LHS a == 0,这是真的,因此不执行b/a.
我的理论错了吗?我很确定这是非常简单的事情,我现在无法理解
优先权并不意味着评估顺序,只是分组(括号).
在对第一个操作数进行检验之后有一个序列点(旧的说法)||,因此||必须在第二个操作数之前评估第一个操作数,而不管这些操作数是什么.由于在这种情况下表达式的整体结果a == 0 || b/a由第一个操作数确定,因此根本不评估第二个操作数.
| 归档时间: |
|
| 查看次数: |
871 次 |
| 最近记录: |