Técnicas de Fluxo de Controle
Comportamento de "Fall-Through"
"Fall-through" ocorre quando uma instrução break é omitida, permitindo que a execução continue para o próximo caso.
#include <iostream>
int main() {
int valor = 2;
switch (valor) {
case 1:
std::cout << "Um ";
case 2:
std::cout << "Dois ";
case 3:
std::cout << "Três" << std::endl;
break;
default:
std::cout << "Padrão" << std::endl;
}
return 0;
}
Visualização de "Fall-Through"
graph TD
A[Entrar em Switch] --> B{valor = 2}
B --> |Correspondência Caso 2| C[Imprimir "Dois "]
C --> D[Imprimir "Três"]
D --> E[Sair de Switch]
Técnicas Intencionais de "Fall-Through"
| Técnica |
Descrição |
Caso de Uso |
| "Fall-Through" Explícito |
Use o atributo [[fallthrough]] |
C++17 e versões posteriores |
| Múltiplos Casos de Manejo |
Agrupar casos sem break |
Lógica compartilhada |
Manejo Avançado de Casos
#include <iostream>
enum class Cor { VERMELHO, VERDE, AZUL };
int main() {
Cor corSelecionada = Cor::VERDE;
switch (corSelecionada) {
case Cor::VERMELHO:
case Cor::VERDE: {
std::cout << "Cor quente" << std::endl;
break;
}
case Cor::AZUL: {
std::cout << "Cor fria" << std::endl;
break;
}
}
return 0;
}
Otimização de Switch em Tempo de Compilação
#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 em tempo de compilação: " << resultado << std::endl;
return 0;
}
Switch com Verificação de Faixa
#include <iostream>
#include <limits>
int main() {
int pontuacao = 85;
switch (pontuacao) {
case 90 ... 100:
std::cout << "Excelente" << std::endl;
break;
case 80 ... 89:
std::cout << "Bom" << std::endl;
break;
case 70 ... 79:
std::cout << "Médio" << std::endl;
break;
default:
std::cout << "Necessita de melhoria" << std::endl;
}
return 0;
}
Flags de Compilação
Para compilar com recursos C++17 no Ubuntu 22.04:
g++ -std=c++17 switch_techniques.cpp -o switch_techniques
./switch_techniques
Boas Práticas
- Use
break para evitar "fall-through" não intencional.
- Utilize
[[fallthrough]] para "fall-through" intencional.
- Agrupe casos semelhantes para código conciso.
- Considere otimizações em tempo de compilação.
- Use
constexpr para instruções switch críticas de desempenho.
Com o LabEx, você pode experimentar e dominar essas técnicas avançadas de fluxo de controle switch em um ambiente de codificação interativo.