【发布时间】:2012-10-30 14:31:00
【问题描述】:
我最近遇到了一段代码
// 克服被零除的程序
int a=0;
int b=100;
int c= a==0 || b/a ;
printf("Hello");
//输出:你好
我的理论: 根据优先级,运算符 / 的优先级高于 ||。所以 b/a 必须首先执行,我们应该得到一个运行时错误。
我假设正在发生的事情是:
短路运算符 || , 计算 LHS a==0,结果为真,因此不执行 b/a。
我的理论错了吗?我很确定这是非常简单的事情,我现在无法弄清楚
【问题讨论】:
-
请告诉我为什么要写代码,你必须挠头才能弄清楚发生了什么?它很愚蠢,无法维护,因此是 c**P!请告诉我写这样的代码有什么意义。
-
@EdHeal 实际上这很常见。唯一困扰我的是
(a==0)在分配给c时被视为 int 0 而不是 boolean false,但我相信无论如何这是 C 的事情。 -
@EdHeal 我还没有写这段代码,我在我正在执行的某个程序中看到了这段代码。
-
@GolezTrol
a == 0计算结果为 1/true。存在从bool到int的隐式转换,因此int c = boolean_expression;等价于int c = boolean_expression ? 1 : 0;。 -
@DanielFischer,谢谢- 大团结球迷:)。
标签: c++ c operators logical-operators