这两个循环是否等价:差一

Are these two loops equivalent: off-by-one

这两个循环是一样的吗?由于某种原因,第二个循环差了一个,我不知道为什么。

while ( !b && ++n < WORD_COUNT ) b = mWords[n];
n++;
while ( !b && n < WORD_COUNT ) {
    b = mWords[n];
    n++;
}

当谓词 b 不成功时,逻辑 short-circuit 可能适用于第一种形式,最后的增量 n 可能会被跳过。

在第二种形式中,增量发生在谓词 b 被评估之前,因此当循环退出时 n 是 off-by-one。