我刚在技术访谈中被问到一个问题,我有点困惑。
问题如下:
如果
int i = -1, int j = -1, and int k = -1,
我们运行以下行:
++i && ++j && ++k
i,j和k的新值是什么?我感到困惑的原因是,因为我们没有将这个表达式赋值给任何东西,所以看起来并不像运算符应该有任何区别(只有增量运算符应该)。然而,运行一个简单的测试程序很快证明我错了。有人可以向我解释一下,因为我以前从未见过这个练习。
答案 0 :(得分:20)
这里的关键是&&
正在短路。
因此,首先评估++i
。它递增i
并返回新值0
,因此表达式的其余部分不会被评估。
如果我没弄错的话,这些值应为0, -1, -1
。
答案 1 :(得分:2)
在这种情况下,表达式++i
的值为0
,也就是假,因此永远不会评估和操作快捷方式和后面的表达式。