Поделиться через


оператор 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 параметр компилятора отключить эти расширения.

См. также

Ссылки

Выписки выделения (C++)

Ключевые слова C++

Использование меток в выписке case