Давным-давно, много лун назад, VS6 существовал и был популярен. Однако он не соответствовал ряду стандартов C ++; что было разумным в то время, поскольку он был выпущен незадолго до (в том же году) официального выпуска стандарта; однако, насколько мне известно, он придерживался проекта стандарта.
Одним из стандартов, которые изменились между черновиком и официальным стандартом, было время жизни переменных цикла for, созданных в первом разделе; что приводит к тому, что следующий код не может быть скомпилирован
{
for (int i=0; i<1; ++i){}
for (int i=0; i<2; ++i){}
}
потому что i
был переопределен вторым циклом for.
В то время как другие компиляторы также страдали этой ошибкой; Я выделяю версию VS6, потому что она оставалась единственной версией Visual Studio в течение нескольких лет после выпуска стандарта, но никогда не выпускала обновления для этой конкретной проблемы; это означает, что это имело более значительное влияние.
Чтобы решить эту проблему, нужно поместить весь цикл for в его собственную область видимости, как вы показали.