Sdílet prostřednictvím


přepínač příkazu (C++)

Umožňuje výběr mezi více částí kódu v závislosti na hodnotě nedílnou výrazu.

switch ( expression )
   case constant-expression : statement
   [default  : statement]

Poznámky

Výraz musí být integrálního typu nebo typu třídy, pro které je jednoznačné převodu na integrálního typu.Nedílnou propagace se provádí podle popisu v Nedílnou propagace.

switch Prohlášení subjektu se skládá z řady případ štítky a volitelným výchozí popisek.Dva konstantní výrazy v případ příkazy lze vyhodnotit na stejnou hodnotu.Výchozí štítek může být pouze jednou.Označené příkazy nejsou syntaktické požadavky, ale switch prohlášení je nesmyslné bez nich.Výchozí příkaz je třeba nesmí přijít na konci; může se zobrazit kdekoli v textu příkazu switch.Case nebo výchozí popisek může být pouze uvnitř příkazu switch.

Konstantní výraz v každém případ popisek je převeden na typ výraz a v porovnání s výraz pro rovnost.Řízení předá prohlášení, jehož případkonstantní výraz s hodnotou výraz. Výsledné chování je uveden v následující tabulce.

Chování příkazu Switch

Podmínka

Akce

Převedené hodnoty odpovídá převedených řízení výraz.

Ovládací prvek bude převeden na příkaz následující tento popisek.

Žádný z konstant neodpovídá konstanty v případ štítky; výchozí popisek je k dispozici.

Ovládací prvek bude převeden do výchozí popisek.

Žádný z konstant neodpovídá konstanty v případ štítky; Výchozí štítek není k dispozici.

Ovládací prvek bude převeden na příkaz následující po switch prohlášení.

Pokud je nalezen odpovídající výraz, řízení nesmí bránit následné případ nebo výchozí štítky.Konec zastavit a přenést řízení na příkaz následující po použití příkazu switch prohlášení.Bez Konec prohlášení, každé prohlášení porovnané případ popisek na konec switch, včetně výchozí, je spuštěn.Příklad:

// 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) );
}

V tomto příkladu capa je zvýšen, pokud c je velkým A.break Prohlášení po capa++ ukončí provádění switch předá subjektu prohlášení a řízení while smyčky.Bez break prohlášení, lettera a nota by rovněž zvýšen.Obsluhován podobným účelem break za case 'a'.Pokud c je malá a, lettera je zvýšen a break příkaz ukončí switch prohlášení subjektu.Pokud c není a nebo A, default provedení příkazu.

Vnitřní blok switch výkaz může obsahovat definic s inicializací, jako jsou dosažitelné –, není obejít všechny možné spuštění cesty.Názvy zavedena pomocí těchto prohlášení mají místní rozsah.Příklad:

// 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 prohlášení mohou být vnořené.V takových případech případ nebo výchozí štítky přidružit nejblíže k switch prohlášení, která je obklopuje.

Konkrétní společnosti Microsoft

Microsoft c neomezuje počet případů hodnot v switch prohlášení.Počet je omezen pouze dostupné paměti.ANSI c vyžaduje alespoň 257 v případě popisky povoleny switch prohlášení.

Výchozí nastavení pro Microsoft C je, že jsou povolena rozšíření Microsoft.Použití /Za volba kompilátoru zakázání těchto rozšíření.

Viz také

Referenční dokumentace

Výběr příkazů (C++)

Klíčových slov jazyka C++

V případě prohlášení pomocí popisků