我的小组正在对 for 循环构造进行一些讨论和强烈的感受。
我喜欢这样的循环:
size_t x;
for (x = 0; x < LIMIT; ++x) {
if (something) {
break;
}
...
}
// If we found what we're looking for, process it.
if (x < LIMIT) {
...
}
但其他人似乎更喜欢布尔标志,如:
size_t x;
bool found = false;
for (x = 0; x < LIMIT && !found; ++x) {
if (something) {
found = true;
}
else {
...
}
}
// If we found what we're looking for, process it.
if (found) {
...
}
(并且,在语言允许的情况下,使用“for (int x = 0; ...”。)
第一种样式有一个更少的变量来跟踪和一个更简单的循环头。尽管以“重载”循环控制变量和(有些人会抱怨)使用 break 为代价。
第二种风格明确定义了变量的角色,但更复杂的循环条件和循环体(设置了 else 或 continue after found ,或循环平衡中的“if (!found)”)。
我认为第一种风格在代码复杂性上胜出。我正在寻找更广泛受众的意见。指向更容易阅读和维护的实际研究的指针会更好。“没关系,把它排除在你的标准之外”也是一个很好的答案。
OTOH,这可能是错误的问题。我开始认为正确的规则是“如果你必须打破一个 for,那真的是一段时间。”
bool found = false;
x = 0;
while (!found && x < LIMIT) {
if (something) {
found = true;
...handle the thing...
}
else {
...
}
++x;
}
执行前两个示例的操作,但行数更少。不过,它确实将 x 的初始化、测试和增量分成了三行。