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 ?
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.
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.
Tags und Links java c# c++ switch-statement