C ++中的一个编码标准是"不要在for循环块中更改循环变量"。
遵循此规则的所有优点是什么,反之亦然?
我试图将一个长句子分成较小的句子,最大字符数限制(21个字符)作为分隔符。
tokens
(a std::vector
)由所有字符串组成:
for (size_t index = 0; index < totalTokens ; ++index) {
std::string temp(str1 + STRING_SINGLESPACE + tokens[index]);
if (temp.length() < maxcharacterlimit) {
str1 = temp;
} else {
subsystemlist.push_back(str1);
str1 = STRING_EMPTY;
--index;
}
}
在for
循环内,我正在使用index
更改--index
。
答案 0 :(得分:4)
编码标准不是绝对的规则,它们是指导方针。通常如果你在循环中更新迭代变量,那就错了。例如,今天早些时候我看到一个问题,有人写了类似的东西:
for (int i = 0; i < arrayLen; i++) {
if (array[i] == array[i++]) {
// do something
}
}
array[i++]
错了,他的意思是array[i+1]
。由于这个错误,他正在增加变量的额外时间并跳过元素。
但可能有正当理由。
例如,您的代码想要在启动subsystemlist
的新元素时再次处理相同的元素。
您可能会执行此操作的另一种常见情况是处理命令行参数的循环。主循环递增参数索引,但如果选项后面有参数,则会增加参数索引的次数以跳过它们。 (虽然这些天通常使用类似getopts()
的库函数来自动完成此过程的大部分工作。)