"有什么意义?不要在for循环块中更改循环变量"?

时间:2017-11-23 05:10:46

标签: c++ loops for-loop standards

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

1 个答案:

答案 0 :(得分:4)

编码标准不是绝对的规则,它们是指导方针。通常如果你在循环中更新迭代变量,那就错了。例如,今天早些时候我看到一个问题,有人写了类似的东西:

for (int i = 0; i < arrayLen; i++) {
    if (array[i] == array[i++]) {
        // do something
    }
}

array[i++]错了,他的意思是array[i+1]。由于这个错误,他正在增加变量的额外时间并跳过元素。

但可能有正当理由。

例如,您的代码想要在启动subsystemlist的新元素时再次处理相同的元素。

您可能会执行此操作的另一种常见情况是处理命令行参数的循环。主循环递增参数索引,但如果选项后面有参数,则会增加参数索引的次数以跳过它们。 (虽然这些天通常使用类似getopts()的库函数来自动完成此过程的大部分工作。)