9 Statements [stmt.stmt]

9.4 Selection statements [stmt.select]

9.4.2 The switch statement [stmt.switch]

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

Условие должно быть целочисленного типа, типа перечисления или типа класса. Если тип класса, условие относится contextually implicitly converted к целочисленному или перечислимому типу. Если тип (возможно, преобразованный) подлежит integral promotions, условие преобразуется в повышенный тип. Любой оператор внутри switch оператора может быть помечен одной или несколькими метками case, как показано ниже:

case constant-expression :

где constant-expressionдолжно быть преобразованием constant expression настроенного типа состояния переключения. Никакие две константы case в одном переключателе не должны иметь одинаковое значение после преобразования.

Должно быть не более одной метки формы

default :

в switch заявлении.

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

Когда switch оператор выполняется, его состояние оценивается и сравнивается с каждой константой case. Если одна из констант case равна значению условия, управление передается оператору, следующему за меткой сопоставленного case. Если ни одна константа регистра не соответствует условию и если есть default метка, управление передается оператору, помеченному меткой по умолчанию. Если ни один регистр не соответствует и если нет, default то ни один из операторов в переключателе не выполняется.

case и default сами по себе ярлыки не изменяют поток управления, который продолжается беспрепятственно через такие ярлыки. Чтобы выйти из переключателя, см break. [ Note: Обычно подоператор , что является предметом переключателя является соединением и case и default этикетки появляются на показаниях верхнего уровня , содержащихся в (соединение) подоператор, но это не является обязательным. Объявления могут появляться в подзапросе switch утверждения. ]end note

switch Утверждение вида

switch ( init-statement condition ) statement

эквивалентно

{
	init-statement
	switch ( condition ) statement
}

за исключением того, что имена, объявленные в, init-statementнаходятся в той же декларативной области, что и имена, объявленные в condition.