"Do not change a loop variable inside a for loop block"的意义是什么?



C 中的编码标准之一是"请勿更改for loop块内部的循环变量"。

遵循此规则的所有优点是什么,反之亦然?

我试图将一个长句子分为具有最大字符限制(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

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

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

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

但可能存在正当原因。

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

您可能会这样做的另一个常见情况是处理命令行参数的循环。主循环会增加参数索引,但是如果一个选项在其之后具有参数,则您将增加参数索引额外的时间以跳过它们。(尽管如今,人们通常会使用诸如getopts()之类的库函数来自动化此过程的大部分时间。)

相关内容

最新更新