这两个循环是否等价:差一
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。
这两个循环是一样的吗?由于某种原因,第二个循环差了一个,我不知道为什么。
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。