san*_*n45 2 c short-circuiting logical-operators
在下面的代码中:
#include <stdio.h>
int main()
{
int a = 1;
int b = 1;
int c = a || --b;
int d = a-- && --b;
printf("a = %d, b = %d, c = %d, d = %d", a, b, c, d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我期待输出是:
A = 0,B = 1,C = 1,d = 0
因为由于下面一行中的短路,即a--返回0,所以另一部分不会被执行正确?
int d = a-- && --b;
Run Code Online (Sandbox Code Playgroud)
输出是:
a = 0,b = 0,c = 1,d = 0
有人可以解释一下吗?
在第一种情况下
int c = a || --b;
Run Code Online (Sandbox Code Playgroud)
在此之后a=1,b=1和c=1
a值是1,因为--b没有进行短路评估
int d = a-- && --b;
Run Code Online (Sandbox Code Playgroud)
a-- 在post decrement这样的递减a那里不会表达的影响的--b是pre decrement这样的效果在这里
你的病情变了
int d= 1 && 0 ;
Run Code Online (Sandbox Code Playgroud)
在此a=0;之后b=0,c=1和d=0.