Steuerungsfluss-Techniken
Fall-Through-Verhalten
Fall-Through tritt auf, wenn eine break
-Anweisung weggelassen wird, wodurch die Ausführung zum nächsten Case fortgesetzt wird.
#include <iostream>
int main() {
int value = 2;
switch (value) {
case 1:
std::cout << "Eins ";
case 2:
std::cout << "Zwei ";
case 3:
std::cout << "Drei" << std::endl;
break;
default:
std::cout << "Standard" << std::endl;
}
return 0;
}
Fall-Through-Visualisierung
graph TD
A[Switch-Eingang] --> B{value = 2}
B --> |Case 2 übereinstimmt| C[„Zwei “ ausgeben]
C --> D[„Drei“ ausgeben]
D --> E[Switch verlassen]
Absichtliches Fall-Through-Verhalten
Technik |
Beschreibung |
Anwendungsfall |
Explizites Fall-Through |
Verwenden Sie das [[fallthrough]] -Attribut |
C++17 und höher |
Mehrere Case-Handlungen |
Gruppieren Sie Cases ohne break |
Gemeinsame Logik |
Erweiterte Case-Handhabung
#include <iostream>
enum class Farbe { ROT, GRÜN, BLAU };
int main() {
Farbe ausgewählteFarbe = Farbe::GRÜN;
switch (ausgewählteFarbe) {
case Farbe::ROT:
case Farbe::GRÜN: {
std::cout << "Warme Farbe" << std::endl;
break;
}
case Farbe::BLAU: {
std::cout << "Kühle Farbe" << std::endl;
break;
}
}
return 0;
}
Kompilierungszeit-Optimierung von Switch-Anweisungen
#include <iostream>
constexpr int berechneWert(int input) {
switch (input) {
case 1: return 10;
case 2: return 20;
case 3: return 30;
default: return 0;
}
}
int main() {
constexpr int ergebnis = berechneWert(2);
std::cout << "Ergebnis zur Kompilierungszeit: " << ergebnis << std::endl;
return 0;
}
Switch mit Bereichsprüfung
#include <iostream>
#include <limits>
int main() {
int punkte = 85;
switch (punkte) {
case 90 ... 100:
std::cout << "Hervorragend" << std::endl;
break;
case 80 ... 89:
std::cout << "Gut" << std::endl;
break;
case 70 ... 79:
std::cout << "Durchschnittlich" << std::endl;
break;
default:
std::cout << "Verbesserung erforderlich" << std::endl;
}
return 0;
}
Kompilierungsflags
Um mit C++17-Funktionen unter Ubuntu 22.04 zu kompilieren:
g++ -std=c++17 switch_techniques.cpp -o switch_techniques
./switch_techniques
Best Practices
- Verwenden Sie
break
, um unerwünschtes Fall-Through zu verhindern
- Nutzen Sie
[[fallthrough]]
für intendierte Fall-Through-Verhalten
- Gruppieren Sie ähnliche Cases für prägnanten Code
- Berücksichtigen Sie Kompilierungszeit-Optimierungen
- Verwenden Sie
constexpr
für leistungskritische Switch-Anweisungen
Mit LabEx können Sie diese fortgeschrittenen Switch-Steuerungsfluss-Techniken in einer interaktiven Programmierumgebung erproben und beherrschen.