switch-anweisung
-
Kóyaánasqatsi schrieb:
FreakY<3Cpp schrieb:
Wie noobLolo schon meinte, man kann switch-Anweisungen nur mit Integer benutzen.
Geht auch mit char und short.
Angeber. :p
-
Nein er hat ja Recht. Char kann ja auch Zahlen aufnehmen, ist nunmal aber nur 8 Bit groß. Aber wenn du schon short ansprichst, können wir auch noch long und bool hinzufügen :p
-
noobLolo schrieb:
ein switch case ist aber nichts anderes als verschachtelte if's
Klares NEIN.
Verschachtelte if's müssen der Reihe nach durchgelaufen und evaluiert werden bis eine Bedingung eintritt. switch/case dagegen ist ein Jump direkt zu dem case der zutrifft. Das ist ein ziemlicher Unterschied im Laufzeitverhalten.
-
loks schrieb:
Unterschied im Laufzeitverhalten.
Achja? Beweise mal!
-
FreakY<3Cpp schrieb:
Nein das geht "leider" nicht.
Das geht zum Glück nicht.
Kóyaánasqatsi schrieb:
Achja? Beweise mal!
Ich hab dazu mal gelesen das switch zu einer Sprungtabelle zerlegt wird, weiß aber nicht wie sie aussieht, wäre auch Logisch da switch ja im Grudne nur aus == Vergleichen besteht. Und das ganze wäre deffinitiv schneller als irgendwelche If Ketten.
Das Verhalten das der Ersteller woltle wird in VB nterstützt und da ist es wirklich nur ein verschachteltes IF und im übrigen ne Design Katastrophe.
-
Kóyaánasqatsi schrieb:
loks schrieb:
Unterschied im Laufzeitverhalten.
Achja? Beweise mal!
Beweisen ist ein bisschen schwer, da der Standard das nicht explizit verlangt. Aber in der Dokumentation der meisten Compiler steht drin, dass sie diese Art von Code erzeugen und normalerweise gibt es eine Option, diese Optimierung auszuschalten. Das hindert einen guten Optimierer natürlich nicht daran, auch aus verschachtelten if-Bedingungen einen solchen jump-table zu erzeugen, aber mit der switch-Anweisung macht man diese Optimierung wesentlich einfacher.
-
loks schrieb:
noobLolo schrieb:
ein switch case ist aber nichts anderes als verschachtelte if's
Klares NEIN.
Verschachtelte if's müssen der Reihe nach durchgelaufen und evaluiert werden bis eine Bedingung eintritt. switch/case dagegen ist ein Jump direkt zu dem case der zutrifft. Das ist ein ziemlicher Unterschied im Laufzeitverhalten.
also ich bilde mir ein das es in den meißtem programmier sprachen ähnlich ist, hab nur mal die erfahrung mit java gemacht, das ein switch abhängig von den zahlen entweder zu if/else abfragen oder einer lookuptable umgeformt wird bsp.
switch(x){ case 10025542: break; case 50: break; case 55334515: break; } //daraus machst mir mal ne lookup table... und nachdem das eher schwer ist, wird es am ende iwie so daliegen if(x>10025542){ if(x==55334515) ... }else{ if(x==10025542) ... else if(x==50) ... } //sollten die lücken kleiner sein könnte es sein das es zu einer lookuptable wird, was aber eher compiler abhängig ist...lg lolo
-
noobLolo schrieb:
//sollten die lücken kleiner sein könnte es sein das es zu einer lookuptable wird, was aber eher compiler abhängig ist...
also eigentlich sollten zahlenbereiche die so gut wie keine lücken enthalten fast immer zu einer lookuptable mutieren

-
Danke eure Antworten haben mir sehr geholfen!

-
nur das wir uns richtig verstehen, ich wollte nicht darauf hinaus, statt switch() irgendwelche if/else konstrukte zu verwenden, ich dachte nur falls das if schon bekannt ist hilft das ein bischen beim verständnis des switch, also bitte immer schön switch() verwenden

lg lolo