Natknąłem się na ten układ for-loop:
#include <iostream>
int main()
{
{
for (int i = 0; i != 10; ++i)
{
std::cout << "delete i->second;" << std::endl;
}
}
{
for (size_t i = 0; i < 20; ++i)
{
std::cout << "delete m_indices[i];" << std::endl;
}
}
return 0;
}
Zastanawiałem się, do czego służy ta dodatkowa warstwa szelek? To pojawia się kilka razy w naszej bazie kodu.
Odpowiedzi:
Dawno, dawno temu, wiele księżyców temu VS6 istniał i był popularny. Jednak nie był zgodny z wieloma standardami C ++; co było rozsądne w tamtym czasie, ponieważ został wydany tuż przed (w tym samym roku) oficjalnym wydaniem standardu; był jednak zgodny z projektem standardu, o ile wiem.
Jednym ze standardów, który zmienił się między wersją roboczą a oficjalną normą, był czas życia zmiennych pętli for utworzonych w pierwszej sekcji; co prowadzi do niepowodzenia kompilacji następującego kodu
ponieważ
i
została przedefiniowana przez drugą pętlę for.Podczas gdy inne kompilatory również miały ten błąd; Podkreślam wersję VS6, ponieważ pozostawała jedyną wersją Visual Studio przez wiele lat po wydaniu standardu, ale nigdy nie wydała aktualizacji dla tego konkretnego wydania; co oznacza, że miał bardziej znaczący wpływ.
Rozwiązaniem tego problemu jest wymuszenie całej pętli for we własnym zakresie, jak pokazano.
źródło
{
i}
utworzy zakres, a jeśli zdefiniujesz niektóre zmienne w zakresie, nie będziesz mieć do nich dostępu z zewnątrz. Alefor
już stwórz ten zakres. Więcjest taki sam jak
ale jeśli zdefiniujesz coś między nimi, jest różnica
W tym przykładzie
a
nie będzie dostępny z zewnątrz.źródło
W twoim konkretnym przykładzie nie ma dla nich żadnego powodu.
Czasami możesz chcieć utworzyć zakres dla zmiennej:
Jednak widzę to jako anty-wzór. Zwykle, jeśli potrzebujesz tego zrobić, najprawdopodobniej
for
powinno to być jego własną funkcją.źródło
Jest to zakres blokowy oznaczony
{}
nawiasami klamrowymi. Zwykle służy do oznaczenia obszaru automatycznego składowania . W twoim przypadku wydaje się, że nic nie robi, ponieważ pętla for ma swój własny zakres w standardowym C ++.źródło