我尝试了以下代码段:
void main()
{
int x = 1,y = 1,z = 1;
++x || ++y && ++z;
printf("x = %d\ny = %d\nz = %d\n",x,y,z);
}
Run Code Online (Sandbox Code Playgroud)
我预期的输出是:
x = 2
y = 2
z = 2
Run Code Online (Sandbox Code Playgroud)
但我得到的输出:
x = 2
y = 1
z = 1
Run Code Online (Sandbox Code Playgroud)
这是什么原因?
这是因为短路.
http://en.wikipedia.org/wiki/Short-circuit_evaluation
评估时:
++x || ++y && ++z;
Run Code Online (Sandbox Code Playgroud)
第一部分++x已经确定了整个表达式的值.所以++y && ++z根本没有执行.所以副作用++y和++z未被调用.