2010-05-26 18 views
13

Con respecto a la instrucción switch/case en el código C++ siguiente: "Caso 1" es obviamente falso, entonces ¿cómo/por qué entra en el ciclo do-while?Sentencias de conmutador/caso en C++

#include <iostream> 

using namespace std; 

int main() { 

    int test = 4; 

    switch(test) { 
     case 1: do { 
      case 2: test++; 
      case 3: test++; 
      case 4: cout << "How did I get inside the do-while loop?" << endl; break; 
      case 5: test++; 
     } while(test > 0); 
     cout << test << endl; 
    } 
} 
+0

No veo un 'caso 7' en su ejemplo –

+0

ligero error tipográfico, he cambiado el 7 -> 1 – user320723

Respuesta

18

Ésta es Duff's Device, que es una técnica antigua e inteligente para saltar en medio de un bucle.

+2

inteligente ...? Creo que depende más del caso. No lo usaré si compromete la legibilidad del código. ¿Me puede dar un ejemplo más concreto donde se puede aplicar? – Phong

+1

@Phong: las cosas malas todavía pueden ser ingeniosas. –

+0

Señor, ¡parece que ha hecho su tarea! +1 de mi parte –

0

no he probado, pero en general el do/while debe introducirse en tanto que no tiene declaración "romper" implementado ...

0

El interruptor no evalúa ni comprende el código fuente. Es simplemente un comando para saltar directamente a la etiqueta del código fuente case 4

0

La razón que llegue a la do-while se debe a que:

declaraciones interruptor de inicio de procesamiento en la primera etiqueta. Si NO golpea una declaración de interrupción, continuará hacia abajo a través de cada etiqueta en sucesión hasta que llegue a una (en cuyo caso se cierra), o haya pasado por cada etiqueta y ejecutado todo el código dentro, luego saldrá.

Cuestiones relacionadas