Ist der folgende Code C ++ gültig?
%Vor%Hinweis: Der Code kompiliert auf meinem g ++ - Compiler.
Wie ist es? Nein. Wenn es im Körper einer Funktion wäre? Ja.
Die erste Zeile deklariert eine ganzzahlige Konstante namens var
mit einem Wert von 10
.
Die geschweifte Klammer beginnt einen neuen Block. Innerhalb dieses Blocks wird eine neue Variable mit dem Namen var
deklariert, die ein Array von int
mit einer Größe ist, die dem Wert der zuvor als var
( 10
) deklarierten Integer-Konstante entspricht.
Der Schlüssel ist, dass var
sich auf die erste Variable bezieht, bis nach die zweite Variable namens var
vollständig deklariert ist. Zwischen dem Semikolon nach der zweiten Deklaration und der schließenden Klammer verweist var
auf die zweite Variable. (Wenn es einen Initialisierer für die zweite Variable gab, würde sich var
auf die zweite Variable unmittelbar vor dem Initialisierer beziehen.)
Ja, der Code ist gültig C ++. Non-local var
ist bis zur Deklaration von local var
sichtbar.
So definiert int var[var]
ein lokales Array von 10 ganzen Zahlen.
Ja, der Code ist gültig C ++ Es ist ein Konzept von SCOPE: Verbergen von Namen
%Vor%Ich denke, dieser Link löscht deine Zweifel
IN C ++:
In C:
Wenn Sie ein tiefes Wissen haben möchten. Hier: Gehen Sie auf diesen Link, hier handelt es sich um Lexikalisches oder dynamisches Scoping
aber in Ihrem Code: "Scope :: " der Sichtbarkeit von var .Hier unterscheidet es sich wie lokale und nicht-lokale Variable. Innere Klammern {x = 1; } lokale Variable. wo wie hier {y = 1; {x = 1;} }, hier ist es anders.
hilfreiche Links
Tags und Links c++ definition declaration