Ist der folgende Code C++ gültig?Ist dieser Code C++ gültig?
const int var = 10;
{
int var[var]; // why doesn't this give any error ?
}
Hinweis: Der Code kompiliert auf meinem g ++ - Compiler.
Ist der folgende Code C++ gültig?Ist dieser Code C++ gültig?
const int var = 10;
{
int var[var]; // why doesn't this give any error ?
}
Hinweis: Der Code kompiliert auf meinem g ++ - Compiler.
Ja der Code ist gültig C++. Nicht lokal var
ist bis zur Deklaration des lokalen var
sichtbar.
Also int var[var]
definiert ein lokales Array von 10 ganzen Zahlen.
Wie ist es? Nein. Wenn es im Körper einer Funktion wäre? Ja.
Die erste Zeile deklariert eine ganzzahlige Konstante mit dem Namen var
mit einem Wert von 10
.
Die 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 gleich dem Wert der Ganzzahlkonstante ist, die zuvor als var
(10
) deklariert wurde.
Der Schlüssel ist, dass var
bis auf die erste Variable bezieht sich nach die zweite Variable namens var
vollständig erklärt wird. 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, würde var
beginnen auf die zweite Variable zu verweisen unmittelbar vor dem Initialisierer.)
Lol - +1 für das Bit "im Körper einer Funktion": P –
@Billy: Nun, ich denke, das ist etwas wichtig; Wenn dieser Code im Namespace oder Klassenbereich wäre, müßte der Block ein Namespace oder eine Klasse oder Funktion oder etwas sein ... –
@James McNellis: Name, der sich versteckt, oder eines meiner am meisten gehassten Features. Sie können stundenlang versuchen zu verstehen, was los ist ... –
Ja der Code gültig ist C++ Es ist ein Konzept von SCOPE: Verstecken Namen
const int var = 10;
{
int var[var]; // why doesn't this give any error ?
}
ich denke, das den Link an deine Zweifel
IN C++ löscht:
http://msdn.microsoft.com/en-US/library/9a9h7328%28v=VS.80%29.aspx
In C:
Wenn u Auf diesem tiefe Wissen wollen: für diesen Link gehen, hier die Informationen über lexikalische und dynamischen Scoping
http://en.wikipedia.org/wiki/Scope_%28programming%29
aber im Code: "Scope ::" der Sichtbarkeit von var .Hier unterscheidet es sich wie lokale und nicht-lokale Variable. Innenklammern {x = 1; } lokale Variable. wo wie hier {y = 1; {x = 1;}}, hier ist es anders.
hilfreiche Links
http://msdn.microsoft.com/en-us/library/b7kfh662%28VS.80%29.aspx
http://www.awitness.org/delphi_pascal_tutorial/c++_delphi/c++_scope_variables.html
@BE: Ich denke, die ersten 3 Links, die gab, ist klar. Über dieses Beispiel> Die Ramining keine Notwendigkeit –
Warum wäre es * * nicht gültig sein? –