istruzione switch (C++)
Consente la selezione tra le sezioni precedenti del codice, a seconda del valore di un'espressione integrale.
switch ( expression )
case constant-expression : statement
[default : statement]
Note
espressione deve essere di un tipo integrale o di un tipo di classe per il quale esiste una conversione ambigua a tipo integrale.La promozione integrali viene eseguita come descritto in promozioni integrali.
switch il corpo dell'istruzione è costituito da una serie di evento etichette e un facoltativo impostazione predefinita etichetta.Nessun due espressioni costanti in evento le istruzioni consentono di valutare lo stesso valore.impostazione predefinita l'etichetta può apparire solo una volta.Le istruzioni contrassegnati non sono requisiti sintattici, ma switch l'istruzione è inutile senza di essi.L'istruzione predefinito non necessita di e alla fine; può apparire in un punto qualsiasi del corpo dell'istruzione switch.Un caso o un'etichetta predefinita può apparire solo in un'istruzione switch.
espressione costante in ognuno evento l'etichetta viene convertito nel tipo di espressione e rispetto a espressione per uguaglianza.Il controllo passa all'istruzione di cui evento espressione costante corrisponde al valore di espressione.Il comportamento risultante è indicato nella tabella seguente.
comportamento di istruzione switch
Condizione |
Azione |
---|---|
Corrispondenze convertite di valore che espressioni di controllo alzata di livello. |
Il controllo viene trasferito all'istruzione che segue tale etichetta. |
Nessuna delle costanti corrispondono alle costanti in evento etichette, in impostazione predefinita l'etichetta è presente. |
Il controllo viene trasferito a impostazione predefinita etichetta. |
Nessuna delle costanti corrispondono alle costanti in evento etichette, impostazione predefinita l'etichetta non è presente. |
Il controllo viene trasferito all'istruzione successiva a switch istruzione. |
Se un'espressione corrispondente viene trovata, il controllo non viene impedito da successivo evento o impostazione predefinita etichette.interruzione l'istruzione viene utilizzata per interrompere trasferire il controllo e di esecuzione all'istruzione successiva a switch istruzione.Senza interruzione istruzione, ogni istruzione dal corrispondente evento etichetta alla fine di l switch, inclusi impostazione predefinita, viene eseguito.Di seguito è riportato un esempio:
// 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) );
}
Nell'esempio precedente, capa viene incrementato se c è una maiuscola A.break istruzione dopo capa++ termina l'esecuzione di switch sessioni e corpo del controllo dell'istruzione a while ciclo.senza break istruzione, lettera e nota è inoltre possibile incrementare.Un scopo simile viene utilizzato da break istruzione per case 'a'.se c è una minuscola a, lettera viene incrementato e break l'istruzione termina switch corpo dell'istruzione.se c non viene a o A, default l'istruzione viene eseguito.
Un blocco interno di un oggetto switch l'istruzione può contenere definizioni con le inizializzazioni purché siano ancora raggiungibili, ovvero non sottoposto a override da tutti i percorsi di esecuzione.I nomi introdotti utilizzando queste dichiarazioni hanno ambito locale.Di seguito è riportato un esempio:
// 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;
}
}
In switch l'istruzione può essere annidato.in tali casi, evento o impostazione predefinita membro di etichette al più vicino switch istruzione che le contiene.
Specifici di Microsoft
Microsoft C non limita il numero di valori di case in switch istruzione.Il numero è limitato solo dalla memoria disponibile.In ANSI di C# richiede almeno 257 etichette case è consentito in a switch istruzione.
L'impostazione predefinita per Microsoft C# è che le estensioni Microsoft sono abilitate.utilizzare /Za opzione del compilatore per disabilitare le estensioni.