use*_*632 4 c short-circuiting
我知道什么是C中的短路评估.
a && b (如果a = 0,则不检查操作数b)
a || b (如果a =非零,则不检查操作数b)
但我坚持这个问题
int x = 0;
if (5 || 2 && ++x)
printf("%d", x);
Run Code Online (Sandbox Code Playgroud)
这输出0.
我的第一个想法如下:
据优先顺序表,优先级++,&&,||(降序)
++x:evaluated.x变成1.
2 && ++x评估.两个操作数都被评估.
|| 被评估.
但据此,1应该打印,而不是0.
我的第二个想法是:
5 || anything
Run Code Online (Sandbox Code Playgroud)
anything 由于短路评估没有评估,因此这里没有优先权.
表达式5 || 2 && ++x等同5 || (2 && ++x)于运算符优先级.
运行时5 || 2 && ++x从左到右评估表达式.
正如我们在OR中所知,如果第一个条件为真,则不会检查第二个条件.
因此,这里评估为真,因此(2 && ++x) 不会执行.
这就是为什么x将保持为0的原因.
| 归档时间: |
|
| 查看次数: |
3118 次 |
| 最近记录: |