Técnicas de Flujo de Control
Comportamiento de Caída
La caída ocurre cuando se omite la sentencia break, permitiendo que la ejecución continúe al siguiente caso.
#include <iostream>
int main() {
int valor = 2;
switch (valor) {
case 1:
std::cout << "Uno ";
case 2:
std::cout << "Dos ";
case 3:
std::cout << "Tres" << std::endl;
break;
default:
std::cout << "Predeterminado" << std::endl;
}
return 0;
}
Visualización de la Caída
graph TD
A[Entrar en Switch] --> B{valor = 2}
B --> |Coincide con Caso 2| C[Imprimir "Dos "]
C --> D[Imprimir "Tres"]
D --> E[Salir de Switch]
Técnicas de Caída Intencionada
| Técnica |
Descripción |
Caso de Uso |
| Caída Explícita |
Usar el atributo [[fallthrough]] |
C++17 y posteriores |
| Manejo Múltiple de Casos |
Agrupar casos sin break |
Lógica compartida |
Manejo Avanzado de Casos
#include <iostream>
enum class Color { ROJO, VERDE, AZUL };
int main() {
Color colorSeleccionado = Color::VERDE;
switch (colorSeleccionado) {
case Color::ROJO:
case Color::VERDE: {
std::cout << "Color cálido" << std::endl;
break;
}
case Color::AZUL: {
std::cout << "Color frío" << std::endl;
break;
}
}
return 0;
}
Optimización de Switch en Tiempo de Compilación
#include <iostream>
constexpr int calcularValor(int entrada) {
switch (entrada) {
case 1: return 10;
case 2: return 20;
case 3: return 30;
default: return 0;
}
}
int main() {
constexpr int resultado = calcularValor(2);
std::cout << "Resultado en tiempo de compilación: " << resultado << std::endl;
return 0;
}
Switch con Comprobación de Rango
#include <iostream>
#include <limits>
int main() {
int puntuación = 85;
switch (puntuación) {
case 90 ... 100:
std::cout << "Excelente" << std::endl;
break;
case 80 ... 89:
std::cout << "Bueno" << std::endl;
break;
case 70 ... 79:
std::cout << "Promedio" << std::endl;
break;
default:
std::cout << "Necesita mejorar" << std::endl;
}
return 0;
}
Flags de Compilación
Para compilar con características de C++17 en Ubuntu 22.04:
g++ -std=c++17 switch_techniques.cpp -o switch_techniques
./switch_techniques
Buenas Prácticas
- Usa
break para evitar la caída no intencionada.
- Aprovecha
[[fallthrough]] para la caída intencionada.
- Agrupa casos similares para un código conciso.
- Considera las optimizaciones en tiempo de compilación.
- Usa
constexpr para sentencias switch críticas de rendimiento.
Con LabEx, puedes experimentar y dominar estas técnicas avanzadas de flujo de control switch en un entorno de codificación interactivo.