/ / Jakie jest uzasadnienie dla przełącznika C ++ działającego tylko dla typów integralnych? [duplicate] - c ++, składnia, switch-statement

Jakie jest uzasadnienie dla przełącznika C ++ działającego tylko dla typów integralnych? [duplicate] - c ++, składnia, switch-statement

Uważam, że C ++ powinno na to pozwolić switch() nad każdym typem, który można porównać, a nie tylko typem integralnym. Wydaje się dziwne, że:

switch(myEnum)
{
case myEnumValue1:
... break;
case myEnumValue1:
... break;
}

Jest semantycznie taki sam jak:

if(myEnum == myEnumValue1)
...
else if(myEnum == myEnumValue2)
...

Ale działa to tylko na typach integralnych. Czemu? Jaki jest cel takiego ograniczenia?

Rozumiem, że wygenerowany przez kompilator kod dla switch może być kompatybilny tylko z całką lubTypy wielkości rejestrów, ale tego typu rzeczy są zwykle czarne-boxed od decyzji programistów.Takie rodzaje rzeczy są zwykle pobierane z nas.Jeśli tabela skoku jest lepsza, kompilator powinien generować jeden. if/else potrzebny jest algorytm, niech tak będzie.

Odpowiedzi:

0 dla odpowiedzi № 1

Oświadczenie dotyczące przełącznika zostało odziedziczone po C, zaprojektowanym w czasach świętych, kiedy sprawność wciąż była problemem. Tak, to najprawdopodobniej dlatego, że pozwala na "obliczenie gotów", tzn. Tabel skoków.

Sekwencja porównań może być rzeczywiście alternatywą, ale w przypadku list długich przypadków preferowane może być mieszanie. Nie w zakresie tego wczesnego języka.