Я делаю С++ в Visual Studio 2010 и обнаружил нечетное поведение. Короче говоря, я обнаружил, что это не скомпилируется:
for (int i = 0; i < 10; i++)
{
int i = 11;
}
Это кажется правильным, поскольку переменная я уже объявлена в заголовке цикла цикла.
Теперь, однако, если я вставляю другой цикл for перед повторным объявлением i, то внезапно компилятор, intellisense и т.д. код корректен - не дает никаких реальных предупреждений (Tried warnings level 3 и four (/W3 и /w 4)). Таким образом, это будет скомпилировано и запущено:
for (int i = 0; i < 10; i++)
{
for(int j = 0; j < 5; j++)
{
}
int i = 11;
}
Лично мне кажется странным, что включение другого цикла for-loop оправдывает аналогичный сценарий кода. Любой добрый дух способен рассказать мне, что я здесь не замечаю?
Спасибо заранее!
EDIT: Вау, спасибо всем за все ответы и демонстрации - Ты потрясающий!:) Этот образец, разоблачающий ошибку, перешел мне в голову, я просто предположил, что MS уже заметила бы такую вещь и зафиксировала ее... по крайней мере, в VS2013.
Попробовал изменить настройки оптимизации, как было предложено, но это не имело никакого значения.
Спасибо всем!
Кредит для демонстраций: @Mark Garcia