10

我只是在一次技术面试中被问到一个让我有点困惑的问题。

问题如下:

如果

int i = -1, int j = -1, and int k = -1, 

我们运行以下行:

++i && ++j && ++k

i、j 和 k 的新值是多少?我感到困惑的原因是,由于我们没有将这个表达式分配给任何东西,看起来 and 运算符应该没有任何区别(只有增量运算符应该)。然而,运行一个简单的测试程序很快证明我错了。有人可以向我解释一下,因为我以前从未见过这个练习。

4

2 回答 2

20

这里的关键是&&短路。

所以,++i首先被评估。它递增i并返回新值,即0,因此不会计算表达式的其余部分。

0, -1, -1如果我没记错的话,这些值应该是。

于 2012-10-19T19:02:27.130 回答
2

在这种情况下,表达式的值++i0false,因此永远不会评估 and 操作快捷方式和后面的表达式。

于 2012-10-19T19:03:40.907 回答