Robię C++ w Visual Studio 2010 i znalazłem dziwne zachowanie. Aby długie opowiadanie, stwierdziliśmy, że nie będzie to skompilować:C++ redeclaration niespójne zachowanie zmiennej pętli count?
for (int i = 0; i < 10; i++)
{
int i = 11;
}
Wydaje się słuszne, gdyż zmienna i jest już zadeklarowana w nagłówku pętli for.
Teraz jednak, jeśli wstawię inną pętlę for przed ponowną deklaracją i, to nagle kompilator, intellisense itp thiks kod jest poprawny - nie dając żadnych prawdziwych ostrzeżeń (wypróbowane ostrzeżenia na poziomie 3 i 4 (/ W3 i/w4)). Tak, robi to rzeczywiście skompilować i uruchomić:
for (int i = 0; i < 10; i++)
{
for(int j = 0; j < 5; j++)
{
}
int i = 11;
}
Osobiście uważam, że to dziwne, że insering innego dla pętli legitimates skądinąd sam scenariusz kodu. Wszelkiego rodzaju ducha, który może mi powiedzieć, co tu widzę?
Z góry dziękuję!
EDYTOWANIE: Wow, dziękuję wszystkim za wszystkie odpowiedzi i prezentacje - Jesteś niesamowity! :) Ta próbka odsłaniająca błąd przeszła mi przez myśl, po prostu założyłem, że MS zauważyłoby coś takiego i naprawiło to ... przynajmniej w VS2013.
Próbowano zmienić ustawienia optymalizacji zgodnie z sugestią, ale nie miało to żadnego znaczenia.
Dziękuję wszystkim!
Kredyt dla dema: @Mark Garcia
Czy to kompilator, czy intellisense? –
[Pierwszy fragment kodu] (http://rextester.com/ORRMS33867), [drugi fragment kodu] (http://rextester.com/ESBFG91953). –
Kompilacja kompilatora @LuchianGrigore. VS2012 odrzuca także pierwszy fragment i akceptuje drugi. – Mysticial