0Pricing
C++ Academy · Lektion

consteval und constinit

Moderne Schlüsselwörter für die Compile-Zeit

consteval und constinit ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Über constexpr hinaus

C++20 fügt zwei Schlüsselwörter hinzu, die die Programmierung zur Compilezeit präzisieren: consteval für Funktionen, die garantiert zur Compilezeit ausgewertet werden, und constinit für eine garantierte Initialisierung zur Compilezeit.

consteval: Sofortfunktionen

Eine consteval-Funktion muss zur Compilezeit ausgewertet werden. Anders als constexpr kann sie niemals zur Laufzeit ausgeführt werden.

consteval int cube(int x) {
    return x * x * x;
}

int main() {
    constexpr int c = cube(3);   // OK: compile time
    return c;
}

consteval lehnt Laufzeitaufrufe ab

Der Aufruf einer consteval-Funktion mit einem Laufzeitwert führt zu einem Kompilierungsfehler – diese Garantie wird durchgesetzt.

consteval int cube(int x) { return x * x * x; }

int main() {
    int n = 4;
    // int bad = cube(n);   // ERROR: n is not a constant
    return cube(2);
}

Warum consteval?

Verwenden Sie es, wenn eine Berechnung zur Laufzeit keinen Sinn ergibt – beispielsweise zum Erzeugen einer konstanten Tabelle oder zum Validieren eines Literals zur Compilezeit.

constexpr vs. consteval

constexpr-Funktionen können zur Compilezeit ausgeführt werden, consteval-Funktionen dagegen immer. Wählen Sie consteval, um eine versehentliche Verwendung zur Laufzeit zu verhindern.

constinit: garantierte statische Initialisierung

constinit garantiert, dass eine statische oder thread-lokale Variable zur Compilezeit initialisiert wird. Dadurch wird das Problem der Reihenfolge statischer Initialisierung beseitigt.

constinit int globalCount = 10;   // initialized at compile time

int main() {
    return globalCount;
}

constinit ist nicht const

Anders als eine constexpr-Variable kann eine constinit-Variable nach ihrer Initialisierung zur Compilezeit weiterhin geändert werden. constinit beschränkt lediglich die Art ihrer Initialisierung.

constinit int counter = 0;

int main() {
    counter = 5;   // OK: constinit allows mutation
    return counter;
}

Das Problem der Initialisierungsreihenfolge lösen

Bei nicht lokalen statischen Variablen in verschiedenen Übersetzungseinheiten erzwingt constinit eine statische Initialisierung zur Compilezeit. Dadurch ist der Wert verfügbar, bevor irgendeine dynamische Initialisierung ausgeführt wird.

Drei Schlüsselwörter im Vergleich

constexpr: kann zur Compilezeit ausgewertet werden und ist const. consteval: muss zur Compilezeit ausgewertet werden (bei Funktionen). constinit: erzwingt die Initialisierung zur Compilezeit und bleibt veränderbar.

Compilerunterstützung

Dies sind Funktionen von C++20. Kompilieren Sie mit -std=c++20 (oder höher) unter GCC/Clang oder mit /std:c++20 unter MSVC.

Das richtige Werkzeug auswählen

Verwenden Sie consteval, um Berechnungen zur Compilezeit zu erzwingen, und constinit, um die statische Initialisierung deterministisch zu machen. Zusammen machen sie C++-Code zur Compilezeit sicherer.

Kurzer Test

Testen Sie Ihr Verständnis von consteval und constinit.

Zusammenfassung

Sie haben die C++20-Schlüsselwörter consteval (Funktionen, die zur Compilezeit ausgeführt werden müssen) und constinit (garantierte Initialisierung statischer Variablen zur Compilezeit, die dennoch veränderbar bleiben) kennengelernt. Zusammen mit constexpr ermöglichen sie eine präzise Kontrolle über die Auswertung zur Compilezeit.

Häufig gestellte Fragen

Ist die Lektion „consteval und constinit“ kostenlos?

Ja — der vollständige Text von „consteval und constinit“ 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 „consteval und constinit“?

Moderne Schlüsselwörter für die Compile-Zeit 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 4 von 4.

Wie lange dauert die Lektion „consteval und constinit“?

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. const-Variablen und -Parameter
  2. const-Memberfunktionen
  3. constexpr und Compile-Zeit
  4. consteval und constinit
← Zurück zu C++ Academy