Это - небольшое упрощение как обычно любой современный компилятор, который встречается if..else if ..
последовательность, которая могла тривиально быть преобразована в оператор переключения человеком, компилятор будет также. Но только добавить дополнительную забаву компилятор не ограничивается синтаксисом, так может генерировать "переключатель" как операторы внутренне, которые имеют соединение диапазонов, единых целей, и т.д. - и они могут (и делать), делают это и для переключателя и для если.. еще операторы.
Anyhoo, расширение ответа Konrad состоит в том, что компилятор может генерировать таблицу переходов, но это не обязательно гарантировало (ни желательный). По ряду причин таблицы переходов делают плохие вещи к предикторам ответвления на современных процессорах, и сами таблицы делают плохие вещи кэшировать поведение, например,
switch(a) { case 0: ...; break; case 1: ...; break; }
, Если бы компилятор на самом деле генерировал таблицу переходов для этого, то это, вероятно, было бы медленнее что альтернатива if..else if..
код стиля из-за таблицы переходов, побеждающей предсказание ветвлений.
Вот руководство, объясняющее, как создать сертификат, который должен исправить эту проблему:
Надеюсь, что это исправит то, что вам нужно - хотя вы спрашивали об этом 6+ месяцев назад!
С уважением, Джо