第 1 部分:
i=j=k=1;
m = ++i && ++j || ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
输出:2,2,1,1
第一部分很容易理解,在这里++i && ++j
首先执行,这是正确的(并且增加 i 和 j 的值),因此不需要检查 OR 运算的下一部分(不需要增加 k 的值)。
第二部分:
i=j=k=1;
m = ++i || ++j && ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
输出:2,1,1,1
第二部分令人难以理解,在这里++i || ++j
首先执行,其中++i
是真的(并且增量值i
,由于 OR 运算,所以不需要增加值j
)。接下来在这里执行AND运算应该是增量值k=2
(但仍然是 k 打印 1 的值).
亲爱的利他主义者,请解释一下第二部分发生了什么。
&&
优先级高于||
在 C/C++ 中,将代码呈现为:
m = ++i || (++j && ++k);
As ++i
已经为真,第二部分未执行(短路评估 https://en.wikipedia.org/wiki/Short-circuit_evaluation).
See http://de.cppreference.com/w/cpp/language/operator_precedence http://de.cppreference.com/w/cpp/language/operator_precedence对于运算符优先级。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)