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()
之类的库函数来自动化此过程的大部分时间。)