R.6.4.2 Оператор переключателя

We use cookies. Read the Privacy and Cookie Policy

R.6.4.2 Оператор переключателя

Оператор переключателя вызывает передачу управления на один из нескольких операторов в зависимости от значения выражения.

Выражение должно быть целочисленного типа или типа класса, для которого существует однозначное преобразование к целочисленному типу (§R.12.3). Выполняются стандартные целочисленные преобразования. Любой из операторов переключателя можно пометить одним или несколькими префиксами, имеющими вид:

case выражение-константа:

Здесь выражение-константа (§R.5.19) приводится к преобразованному типу выражения переключателя. Никакие две константы из case одного переключателя не должны иметь одинаковое значение.

В переключателе может быть только один префикс вида

default:

Операторы переключателя могут быть вложенными, тогда метки из case или default относятся к самому первому переключателю, объемлющему их.

При выполнении оператора переключателя вычисляется выражение, и его значение сравнивается с каждой из констант вариантов (case). Если одна из этих констант равна значению выражения, то управление передается в оператор, идущий за этой константой. Если ни одна из констант не совпала со значением выражения, но есть префикс default, то управление передается на оператор с этим префиксом. Если префикса default нет, и совпадения не было, то не выполняется ни один из операторов переключателя.

Если операторы, выполняемые в результате выбора, не приводят к каким-либо передачам управления, то программа продолжает выполняться "по меткам case и default" беспрепятственно. Выход из переключателя возможен с помощью оператора break (см. §R.6.6.1).

Обычно оператор, с которым имеет дело переключатель, бывает составным. Описания могут появиться в операторах переключателя. Однако переход ниже описания, в котором была явная или неявная инициализация, считается незаконным, если только описание не находится во внутреннем блоке, который обходится (т.е. полностью обходится при передаче управления, §R.6.7). Отсюда следует, что описание с явной или неявной инициализацией должно содержаться во внутреннем блоке.