оператор switch (C++)
Позволяет выделение среди нескольких разделов кода, в зависимости от значения объединенного выражения.
switch ( expression )
case constant-expression : statement
[default : statement]
Заметки
Выражение для объединенного типа или типа класса, для которого точно выраженное преобразование к целочисленному типу.Объединенный повышение выполняется как описано в разделе Объединенные promotion.
switch тело выписки состоит из серии case метки и необязательно значение по умолчанию маркер.Нет 2 константы внутри выражений case выписки могут иметь один и тот же значение.значение по умолчанию метка может появляться только один раз.Заданные выписки требований, но не синтактных switch оператор несмыслова без них.По умолчанию выписке придено в конце; она может находиться в любом месте текста выписки переключателя.По умолчанию регистр или метка могут использоваться только внутри выписки переключателя.
Константное выражение в каждом case метка преобразована к типу Выражение и сравнивается с Выражение на равенство.Элемент управления передает в которой выписке case константное выражение соответствует значению Выражение.Результирующая функциональности отображается в следующей таблице.
Реакция на событие выписки переключателя
Атрибут Condition |
Действие |
---|---|
Преобразованные совпадения значения, повышенн уровенього управление выражения. |
Элемент управления передается в выписке следовать этой меткой. |
Ни одна из констант в соответствующих константы case метки. a значение по умолчанию метка отсутствует. |
Элемент управления передается значение значение по умолчанию маркер. |
Ни одна из констант в соответствующих константы case метки. значение по умолчанию метка отсутствует. |
Элемент управления передается в выписке после switch выписка. |
Если соответствующее выражение найдено, то элемент управления не воспрепятствован последующим case OR значение по умолчанию метки.Прервать оператор используется, чтобы остановить элемент управления после выполнения и перенаправления на выписке switch выписка.Без a Прервать выписка каждая из соответствующих, оператор case метка в конец switch, в том числе значение по умолчаниювыполняет действия.Примеры.
// switch_statement1.cpp
#include <stdio.h>
int main() {
char *buffer = "Any character stream";
int capa, lettera, nota;
char c;
capa = lettera = nota = 0;
while ( c = *buffer++ ) // Walks buffer until NULL
{
switch ( c )
{
case 'A':
capa++;
break;
case 'a':
lettera++;
break;
default:
nota++;
}
}
printf_s( "\nUppercase a: %d\nLowercase a: %d\nTotal: %d\n",
capa, lettera, (capa + lettera + nota) );
}
В приведенном выше примере capa увеличивает значение c прописными буквами A.break выписка после capa++ завершается выполнение switch тело сообщения и управление передается для выписки while цикл.Без break выписка, lettera и nota также инкрементировал.Подобная назначение послужена break выписка для case 'a'.If c нижний регистр a" lettera увеличивает на единицу и break выписка заканчивается switch тело выписки.If c нет a OR A" default оператор выполняется.
Внутренний блок a switch оператор может содержать определения с инициализациями при условии, что они доступен, то есть не обойдено всеми возможными путями выполнения.Имена введены с помощью эти объявления имеют локальную область видимости.Примеры.
// switch_statement2.cpp
// C2360 expected
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
switch( tolower( *argv[1] ) )
{
// Error. Unreachable declaration.
char szChEntered[] = "Character entered was: ";
case 'a' :
{
// Declaration of szChEntered OK. Local scope.
char szChEntered[] = "Character entered was: ";
cout << szChEntered << "a\n";
}
break;
case 'b' :
// Value of szChEntered undefined.
cout << szChEntered << "b\n";
break;
default:
// Value of szChEntered undefined.
cout << szChEntered << "neither a nor b\n";
break;
}
}
A switch выписка могут быть вложенными.В таких случаях case OR значение по умолчанию сподвижница меток с самым, чтобы закрыть switch оператор, ограничивающий их.
Только для систем Microsoft
Microsoft c не ограничивает количество значений в выражении case switch выписка.Номер ограничивается только доступной памятью.Допустимая ANSI c требует по крайней мере 257 меток case в выражении switch выписка.
Значение по умолчанию для microsoft c#, что включены расширения microsoft.Используйте /Za параметр компилятора отключить эти расширения.