逻辑运算符及其在C/C++中的优先级

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.

我的理论错了吗?我很确定这是非常简单的事情,我现在无法理解

Dan*_*her 8

优先权并不意味着评估顺序,只是分组(括号).

在对第一个操作数进行检验之后有一个序列点(旧的说法)||,因此||必须在第二个操作数之前评估第一个操作数,而不管这些操作数是什么.由于在这种情况下表达式的整体结果a == 0 || b/a由第一个操作数确定,因此根本不评估第二个操作数.

  • 教师在解释操作员优先权时必须说出一些根本错误的东西,因为很多人都认为它与评估顺序有关.也许需要某种组织,漫游世界各地的人们,他们会说:"首先评估最高优先级的运算符"(或者无论基本错误是什么),将它们捆绑到货车中并将它们驱动到秘密基地进行再教育. (2认同)