Warum können Variablen in einer switch-Anweisung nicht deklariert werden?

8

Ich möchte mehr über " wissen, warum nicht Variablen werden in einer switch-Anweisung deklariert? "

Ich habe den Beitrag gelesen, aber ich verstehe es nicht genau. Sie können die Variable nur innerhalb des Schalters deklarieren, aber eine Variable dekalieren und initialisieren oder das Objekt der Klasse deklarieren, das einen Complie-Zeitfehler ergibt.

Bitte erklären Sie mir ....

    
Omkar Somani 16.01.2009, 07:11
quelle

2 Antworten

20

Im Wesentlichen, weil die Initialisierung der Variablen übersprungen würde, wenn das Label mit der Variableninitialisierung nicht getroffen würde. Dies wäre schlecht, da der Compiler dann Code ausgeben müsste, der die Variable genau dann zerstören würde, wenn der Initialisierungscode ausgeführt worden wäre.

Zum Beispiel:

%Vor%

Wenn der Code default erreicht hätte, wäre a nicht initialisiert worden. Der Compiler hätte das im Voraus herausfinden müssen. Wahrscheinlich wurde dies aus Leistungsgründen abgelehnt.

Die einfache Lösung besteht darin, eine neue Ebene des Bereichs einzuführen:

%Vor%

Das macht es in Ordnung, die Zerstörung von a ist jetzt gut definiert.

    
1800 INFORMATION 16.01.2009 07:21
quelle
8

Hier besteht ein Konflikt zwischen der Sprachsyntax und dem gesunden Menschenverstand. Für uns Menschen sieht es so aus, als ob dieser Code (aus 1800 INFORMATION's Antwort) funktionieren sollte:

%Vor%

Schließlich definieren die geschweiften Klammern den Bereich für a ; es wird nur erstellt, wenn wir case 1 eingeben, es wird sofort zerstört, nachdem der case 1 -Block verlassen wurde, und es wird niemals verwendet, es sei denn, wir geben case 1 . Tatsächlich trennen die case -Etiketten und die break -Befehle die Gültigkeitsbereiche nicht, so dass a danach im gesamten Block existiert, obwohl es logisch ist unerreichbar. Und natürlich gibt es aus syntaktischer Sicht keinen case 1 -Block.

Wenn Sie die switch-Anweisung als eine Reihe von (strukturierten) goto Anweisungen in Verkleidung betrachten, wird das Problem des Bereichs deutlicher:

%Vor%     
Gorpik 16.01.2009 08:09
quelle

Tags und Links