Expressions and statements
ES.86
Не изменяйте переменные управления циклом внутри тела сырых for-циклов
Причина
Управление циклом в начале должно обеспечивать правильное понимание того, что происходит внутри цикла. Изменение счётчиков цикла одновременно в итерационном выражении и в теле цикла является постоянным источником неожиданностей и ошибок.
Пример
for (int i = 0; i < 10; ++i) {
// обновлений i нет -- ok
}
for (int i = 0; i < 10; ++i) {
//
if (/* что-то */) ++i; // ПЛОХО
//
}
bool skip = false;
for (int i = 0; i < 10; ++i) {
if (skip) { skip = false; continue; }
//
if (/* что-то */) skip = true; // Лучше: два понятия — две переменные.
//
}
Контроль
Отмечать переменные, которые потенциально обновляются (имеют неконстантное использование) как в итерационном выражении цикла, так и в теле цикла.