【发布时间】:2016-08-21 03:59:19
【问题描述】:
我知道 C 中的短路评估是什么。
a && b(如果 a = 0,则不检查操作数 b)
a || b(如果 a = 非零,则不检查操作数 b)
但我被这个问题困住了
int x = 0;
if (5 || 2 && ++x)
printf("%d", x);
这会输出0。
我的第一个想法是这样的:
根据优先级表,优先级为++、&&、||(降序)
++x:evaluated.x变为 1。2 && ++x已评估。计算两个操作数。||已评估。
但是根据这个,应该打印1,而不是0。
我的第二个想法是这样的:
5 || anything
anything 由于短路评估而未被评估,因此此处没有优先级。
【问题讨论】:
标签: c short-circuiting