Betrachten wir eine for
Schleife mit einem Zähler:Ist der Gültigkeitsbereich einer Variablen, die in einer for-Schleifen-Deklaration initialisiert wird, tatsächlich mehr als nur den Gültigkeitsbereich zu blockieren?
for (int i = 0; i < 100; i++ /* `i` is visible here */) {
/* `i` is visible here */
}
/* `i` not visible here */
Alles ist gut. We say that i
has "block" scope.
Warum sind Variablen, die innerhalb der for
-Schleife deklariert werden, unter i++
nicht zugänglich?
Zum Beispiel, warum ist j
nicht im Bereich hier, wenn es auch "Block" Bereich hat und in einem Zeitraum, der vor i += j
ist, deklariert wurde?
for (int i = 0; i < 100; i += j /* only `i` is visible here */) {
int j = 1;
/* `i` and `j` are visible here */
}
/* `i` and `j` are not visible here */
Ich habe viele Fragen in Bezug auf den Umfang der i
, gesehen, aber nicht in Bezug auf den Umfang der j
innerhalb der for
Schleife Klammern. Bedeutet das, dass es technisch einen anderen Bereich gibt, über den niemand spricht, der "For-Loop-Deklarationsumfang" ist? Wenn ja, interessiert mich, wie dieser Bereich in Spezifikationen wie Java oder C# definiert ist und in welchem Umfang er von Programmierern allgemein bezeichnet wird.
Bearbeiten: Ja, ich verstehe, dass ich die Schleife als for (int j, i = 0; i < 100; i += j)
deklarieren kann, aber das zeigt immer noch, dass for
Schleifendeklarationen einen höheren Bereich als ihre geschweiften Klammern haben.
Großartig! Dies ist genau das, was ich gesucht habe. Hat dieses Scoping einen Namen? Wie "Block" Anwendungsbereich tut? – 4castle
Nicht das ist mir bewusst. Aber ich denke nicht, dass es auch einen braucht. Es ist nur das Standard-Scoping von for-Schleifen in C-abgeleiteten Sprachen. –
Großartig! Lassen Sie mich wissen, dass ich nur im Sinne des Lernens frage. Wenn ich wirklich mein Inkrement am Ende der for-Schleife verwenden möchte, lasse ich den ForUpdate-Teil einfach leer und setze ihn am Ende des Schleifenkörpers. Das war faszinierend, aber :) – 4castle