warum nur begrenzte Typen in Switch-Case-Anweisungen erlaubt sind

7

Sprachen wie Java , c++ , c , c# allow integral type oder ein Ausdruck, der in switch-case-Anweisungen zu einem ganzzahligen Typ ausgewertet wird. [ string Literale und einige andere Typen sind in einigen Sprachen erlaubt]

Warum müssen wir nur integral -Typen oder eine begrenzte Anzahl von Typen verwenden und nicht Typen wie double , float ? Liegt es an irgendeiner Art von Optimierung oder nur für Einfachheit ?

    
Anirudha 14.01.2013, 10:21
quelle

2 Antworten

15

Erstens erlaubt Java 7 das Einschalten von String-Werten ... und so auch C #. (Und in Java kannst du nicht ein long einschalten ... danke, dass du mich an Peter erinnerst.)

Der Grund dafür, dass float und double nicht zulässig sind, ist höchstwahrscheinlich, dass die heimtückischen Effekte von Rundungsfehlern und ungenauen Darstellungen von Gleitkommazahlen Code, der Gleitkomma-Schalter verwendet, sehr fehleranfällig machen. oder erfordern eine spezielle Syntax zum Ausdrücken von Fehlergrenzen in den case -Werten.

Wenn es jetzt viele gute Anwendungsfälle zum Einschalten von Fließkommawerten gäbe, würde man erwarten, dass einige Sprachen dies unterstützen würden. Aber meines Wissens hat keine Mainstream-Programmiersprache jemals diesen Weg eingeschlagen.

    
Stephen C 14.01.2013, 10:26
quelle
5

Im Fall von C ++ liegt das daran, dass switch / case nicht die Funktionalität von if replizieren soll. Wenn es eine Möglichkeit bieten soll, eine effiziente Sprungtabelle zu erhalten, wenn der Code es erlaubt.

    
David Schwartz 14.01.2013 10:42
quelle

Tags und Links