0Pricing
C++ Academy · Lektion

constexpr-Funktionen und if constexpr

Werten Sie Code zur Compile-Zeit mit constexpr aus und verzweigen Sie mit if constexpr.

constexpr-Funktionen und if constexpr 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.

Auswertung zur Compile-Zeit

Das Schlüsselwort constexpr weist den Compiler an, diesen Ausdruck „wenn möglich zur Compile-Zeit auszuwerten“. Berechnungen zur Compile-Zeit verursachen keine Laufzeitkosten.

constexpr-Variablen

Eine constexpr-Variable muss mit einem konstanten Ausdruck initialisiert werden. Das Ergebnis steht zur Compile-Zeit fest.

constexpr int BUFFER_SIZE = 1024;
constexpr double PI = 3.14159265358979;

constexpr-Funktionen

Kennzeichnen Sie Funktionen mit constexpr, damit sie bei Aufrufen mit konstanten Argumenten zur Compile-Zeit ausgeführt werden können.

constexpr int factorial(int n) {
    return (n <= 1) ? 1 : n * factorial(n - 1);
}

constexpr int five_fact = factorial(5);  // computed at compile time

Laufzeit-Fallback

Eine constexpr-Funktion kann auch mit Laufzeitwerten aufgerufen werden – in diesem Fall wird sie zur Laufzeit ausgeführt.

int n = read_input();
int result = factorial(n);   // runtime call

Einschränkungen für constexpr-Funktionen

Vor C++14:

  • Nur eine return-Anweisung
  • Keine Schleifen
  • Keine Änderung des lokalen Zustands

C++14 lockerte diese Einschränkungen; C++17 und C++20 fügten weitere Möglichkeiten hinzu (try-catch, dynamische Allokation, virtuelle Funktionen).

consteval (C++20)

Erzwingen Sie die Auswertung zur Compile-Zeit mit consteval. Der Aufruf einer consteval-Funktion mit nicht konstanten Argumenten ist ein Fehler.

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

constexpr int c = square(5);    // OK
int x = 5;
// int r = square(x);            // ERROR

constinit (C++20)

constinit garantiert, dass die Variable zur Compile-Zeit initialisiert wird, erlaubt aber Änderungen zur Laufzeit.

if constexpr (C++17)

if constexpr ist eine Verzweigung zur Compile-Zeit. Der nicht ausgewählte Zweig wird nicht einmal kompiliert – das ist besonders für Templates nützlich.

template <typename T>
void print(const T& value) {
    if constexpr (std::is_pointer_v<T>) {
        std::cout << "pointer: " << *value;
    } else {
        std::cout << value;
    }
}

SFINAE ablösen

if constexpr ersetzt komplexe SFINAE-Muster durch eine klare bedingte Logik. Zusammen mit Typ-Traits macht es generischen Code deutlich leichter lesbar.

Algorithmen zur Compile-Zeit

Mit modernem C++ können Sie überraschend komplexe Algorithmen schreiben, die vollständig zur Compile-Zeit ausgeführt werden – Hashing von Zeichenketten, Tabellengenerierung und kleine Parser.

constexpr auto fnv1a(std::string_view s) {
    uint32_t h = 2166136261u;
    for (char c : s) {
        h = (h ^ static_cast<uint8_t>(c)) * 16777619u;
    }
    return h;
}

constexpr auto x = fnv1a("hello");

Templates plus constexpr

Generische constexpr-Funktionen sind eine leistungsstarke Kombination – Sie schreiben generischen, typflexiblen Code, der zur Compile-Zeit ausgewertet wird.

Diagnose

Fehler zur Compile-Zeit in constexpr-Code werden mit detaillierten Positionen gemeldet. Moderne Compiler können den fehlerverursachenden Schritt meist sehr gut lokalisieren.

Schnelltest

Was bewirkt if constexpr, das ein normales if nicht bewirkt?

Zusammenfassung

constexpr ermöglicht die Auswertung zur Compile-Zeit; consteval erzwingt sie; constinit garantiert die Initialisierung zur Compile-Zeit. if constexpr verzweigt zur Compile-Zeit – der nicht ausgewählte Zweig wird niemals instanziiert und ersetzt SFINAE in vielen Fällen.

Häufig gestellte Fragen

Ist die Lektion „constexpr-Funktionen und if constexpr“ kostenlos?

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

Werten Sie Code zur Compile-Zeit mit constexpr aus und verzweigen Sie mit if constexpr. 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 „constexpr-Funktionen und if constexpr“?

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. Funktions- und Klassentemplates aufgefrischt
  2. Templatespezialisierung: partiell und vollständig
  3. Variadische Templates und Parameter-Packs
  4. constexpr-Funktionen und if constexpr
← Zurück zu C++ Academy