[英]Increment operator in C
我尝试了以下代码段:
void main()
{
int x = 1,y = 1,z = 1;
++x || ++y && ++z;
printf("x = %d\ny = %d\nz = %d\n",x,y,z);
}
我预期的输出是:
x = 2
y = 2
z = 2
但我得到的输出:
x = 2
y = 1
z = 1
这是什么原因?
这是因为短路。
http://en.wikipedia.org/wiki/Short-circuit_evaluation
评估时:
++x || ++y && ++z;
第一部分++x
已经确定了整个表达式的值。 所以++y && ++z
根本没有被执行。 因此,不会调用++y
和++z
的副作用。
++x
的结果非零,因此求值为true,因此将||
短路 运营商。 ++y && ++z
未执行。
原因是你正在使用带有副作用的Brobdingnagian布尔表达式。
运算符&&
和||
是“短路”。 这意味着如果在计算左操作数之后确定表达式的结果,则永远不会计算右操作数。
避免使用带有副作用的表达式作为布尔运算符的操作数。 即使行为是你想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.