0Pricing
C++ Academy · Lektion

Range-basierte for-Schleife, nullptr und enum class

Verwenden Sie die praktischen Neuerungen aus C++11: range-basierte for-Schleifen, nullptr und stark typisierte Enumerationen.

Range-basierte for-Schleife, nullptr und enum class ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Drei schnelle Verbesserungen in C++11

C++11 brachte viele kleine Verbesserungen. Drei davon werden Sie täglich verwenden: range-based for, nullptr und enum class.

Zusammenfassung zu bereichsbasierten for-Schleifen

Durchlaufen Sie jeden Container mit begin() und end(), ohne mit Indizes zu rechnen.

for (const auto& x : v) {
    process(x);
}

Was dadurch ersetzt wird

Die ausführliche Schleife auf Basis von Iteratoren wird zu einer einzigen Zeile.

// Before C++11
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
    process(*it);
}

nullptr statt NULL

nullptr ist ein typisiertes Nullzeigerliteral. Es vermeidet die Mehrdeutigkeit bei der Überladungsauflösung von NULL, einem Makro für 0.

void f(int);
void f(int*);

f(NULL);      // calls f(int)
f(nullptr);   // calls f(int*)

Warum nullptr die bessere Wahl ist

Verwenden Sie konsequent nullptr:

  • Eigener Typ (std::nullptr_t)
  • Eindeutigere Absicht
  • Funktioniert in der Template-Metaprogrammierung
  • Kann nicht versehentlich in int konvertiert werden

Einfaches enum: eine Fehlerquelle

Enums im alten Stil geben ihre Namen an den umschließenden Gültigkeitsbereich weiter und werden implizit in int konvertiert.

enum Color { RED, GREEN, BLUE };
int c = RED;            // implicit conversion, no warning
// RED, GREEN, BLUE leak into global scope

enum class: bereichsgebunden und typisiert

enum class in C++11 erfordert eine Namensqualifizierung und verbietet die implizite Konvertierung in int.

enum class Color { Red, Green, Blue };
Color c = Color::Red;
// int n = Color::Red;     // ERROR
std::cout << static_cast<int>(c);   // explicit conversion

Den zugrunde liegenden Typ festlegen

Sie können die Speichergröße einer enum class auf einen bestimmten Ganzzahltyp festlegen.

enum class Status : uint8_t { OK = 0, FAIL = 1, RETRY = 2 };

enum class vorwärtsdeklarieren

Da der zugrunde liegende Typ bekannt ist, können enum classes vorwärtsdeklariert werden – praktisch, um Header-Abhängigkeiten zu entkoppeln.

// header A
enum class Color : int;

// header B (full definition)
enum class Color : int { Red, Green, Blue };

Wann ein einfaches enum in Ordnung ist

Einfache Enums haben weiterhin ihre Berechtigung: bei Bitmasken für ganzzahlige Flags, wenn Sie die implizite Konvertierung wirklich wünschen. Dokumentieren Sie diese Designentscheidung ausdrücklich.

Migrationshinweis

Wenn Sie eine Codebasis modernisieren, wandeln Sie einfache Enums schrittweise in enum class um. Suchen Sie nach Stellen, die auf der impliziten Konvertierung in int beruhen, und ergänzen Sie static_cast.

Kurzer Test

Was macht enum class sicherer als ein einfaches enum?

Zusammenfassung

Drei schnelle Verbesserungen in C++11: Bereichsbasierte for-Schleifen vermeiden den Iterator-Overhead, nullptr ersetzt NULL und enum class bietet bereichsgebundene, typsichere Enums. Verwenden Sie standardmäßig alle drei.

Häufig gestellte Fragen

Ist die Lektion „Range-basierte for-Schleife, nullptr und enum class“ kostenlos?

Ja — der vollständige Text von „Range-basierte for-Schleife, nullptr und enum class“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Range-basierte for-Schleife, nullptr und enum class“?

Verwenden Sie die praktischen Neuerungen aus C++11: range-basierte for-Schleifen, nullptr und stark typisierte Enumerationen. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Range-basierte for-Schleife, nullptr und enum class“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. auto, decltype und Typherleitung
  2. Range-basierte for-Schleife, nullptr und enum class
  3. Lambda-Ausdrücke: Capture, mutable, generisch
  4. Strukturierte Bindings und if-init in C++17
← Zurück zu C++ Academy