多年来,我养成了for
在循环退出后不使用循环迭代器值的习惯。我本可以发誓我这样做了,因为它曾经产生编译器警告,但是在我最近的一次代码审查中受到挑战后,我被证明是错误的。
例如,我总是这样做(注意:我们的代码标准禁止使用“break”关键字):
int i, result;
bool done = false;
for (i=0; i<10 && !done; i++) {
if (some_condition) {
result = i;
done = true;
}
}
// Value of i may be undefined here
现在,result
如果我可以依赖 i 的值,显然可以删除该变量。我认为由于编译器优化,您不能依赖循环迭代器的值。我只是记得一个幻影教学吗?或者这是标准(特别是关于 GNU C)?