C++ Academy · Les

constexpr en compile time

Bereken waarden tijdens het compileren

Les 3 van 413 stappen

constexpr en compile time is een gratis C++ Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C++ Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C++ Academy bevat in totaal 4 lessen.

Wat constexpr betekent

constexpr geeft de compiler aan dat een waarde of functie tijdens de compileertijd kan worden geëvalueerd, waardoor een echte compileertijdconstante ontstaat.

#include <iostream>

int main() {
    constexpr int size = 4 * 4;   // computed at compile time
    int arr[size];
    std::cout << sizeof(arr) / sizeof(int) << "\n";
}

constexpr-functies

Een constexpr-functie kan tijdens de compileertijd worden uitgevoerd wanneer deze constante argumenten krijgt, en anders tijdens de uitvoeringstijd.

#include <iostream>

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

int main() {
    constexpr int s = square(5);   // compile time
    int n = 6;
    std::cout << s << " " << square(n) << "\n";  // second at runtime
}

Compileertijdconstanten in arrays

Omdat constexpr-waarden tijdens de compileertijd bekend zijn, kunnen ze de grootte van arrays bepalen en als sjabloonargumenten dienen.

constexpr versus const

const betekent "kan niet veranderen"; constexpr betekent "bekend tijdens de compileertijd". Elke constexpr is impliciet const, maar niet elke const is constexpr.

#include <iostream>

int main() {
    int x;
    std::cin >> x;
    const int a = x;        // const but runtime value
    constexpr int b = 10;   // compile-time constant
    std::cout << b << "\n";
}

Recursieve constexpr

constexpr-functies mogen recursief zijn, zodat de compiler bijvoorbeeld faculteiten kan berekenen voordat het programma wordt uitgevoerd.

#include <iostream>

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

int main() {
    constexpr long f = factorial(5);  // 120 at compile time
    std::cout << f << "\n";
}

Uitgebreidere constexpr in modern C++

Sinds C++14 mogen constexpr-functies lussen, lokale variabelen en vertakkingen bevatten, zodat je tijdens de compileertijd complexe constanten kunt berekenen.

#include <iostream>

constexpr int sumTo(int n) {
    int total = 0;
    for (int i = 1; i <= n; ++i) total += i;
    return total;
}

int main() {
    constexpr int s = sumTo(100);
    std::cout << s << "\n";
}

constexpr-variabelen moeten tijdens de compileertijd worden geïnitialiseerd

Een variabele die als constexpr is gedeclareerd, moet een initialisatie-expressie hebben die tijdens de compileertijd kan worden geëvalueerd, anders wordt het programma niet gecompileerd.

Voordelen van berekeningen tijdens de compileertijd

Berekenen tijdens de compileertijd betekent geen kosten tijdens de uitvoering, waarden die in constante contexten kunnen worden gebruikt en eerdere detectie van fouten.

constexpr en sjablonen

constexpr-waarden sluiten natuurlijk aan bij sjablonen en std::array, waarbij groottes en parameters compileertijdconstanten moeten zijn.

Wanneer het terugvalt op uitvoeringstijd

Als een constexpr-functie niet-constante argumenten krijgt, wordt deze gewoon tijdens de uitvoeringstijd uitgevoerd zoals een normale functie — zonder fout.

Geef de voorkeur aan constexpr voor constanten

Gebruik constexpr voor echte constanten, zoals groottes, wiskundige berekeningen en opzoektabellen. Het is expressiever dan const en maakt garanties tijdens de compileertijd mogelijk.

Korte controle

Test je begrip van constexpr.

Samenvatting

Je hebt geleerd dat constexpr evaluatie van variabelen en functies tijdens de compileertijd mogelijk maakt, verschilt van const (dat alleen wijzigingen verbiedt), lussen en recursie in modern C++ ondersteunt en terugvalt op de uitvoeringstijd wanneer het niet-constante invoer krijgt.

Gratis beginnen

Leer C++ met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
51
Lessen
203

Veelgestelde vragen

Is de les “constexpr en compile time” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad C++ Academy, waaronder “constexpr en compile time”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus C++ Academy bevat in totaal 4 lessen.

Wat leer ik in “constexpr en compile time”?

Bereken waarden tijdens het compileren Je oefent met C++ Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C++ Academy te beginnen?

Ervaring vooraf is niet nodig. C++ Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “constexpr en compile time”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C++ Academy?

Ja. Elke les over C++ Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. const-variabelen en -parameters
  2. const-memberfuncties
  3. constexpr en compile time
  4. consteval en constinit
← Terug naar C++ Academy