Автор: oleg_alexeev (01.03.2007 в 15:10)
По-моему, дело тут в следующем:
Изначально при создании С++ (автор ведь спрашивает про С++ ?) объявление переменной
в операторе for было эквивалентно определению этой переменной непосредственно перед
for, т.е.
for (int i=0; i<10; i++)
{
}
|
был эквивалентен
int i = 0;
for (; i<10; i++)
{
}
|
поэтому пример автора эквивалентен следующему:
int i = 0;
for (; i<10; i++)
{
int j = 0;
for (; j<10; j++)
{
}
}
i = 0; // работает
j = 0; // не работает (вышли из блока, где j была объявлена)
|
Сейчас стандарт С++ изменили, так что i и j не будут существовать вне своих циклов.
Скомпилировав приведенный код компилятором GCC мы увидим, что это так.
Но компилятор от Microsoft умничает, он ругается только тогда, когда имеются объявления
переменных с такими же именами вне циклов. Когда же их нет, он ведет себя согласно
старому стандарту, обеспечивая большую совместимость со старым кодом.