C++ Academy · Les

noexcept-specificatie

Markeer functies die geen exceptions werpen

Les 3 van 413 stappen

noexcept-specificatie 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 noexcept verklaart

De aanduiding noexcept belooft dat een functie geen uitzondering werpt. Als dat toch gebeurt, roept het programma std::terminate aan.

#include <iostream>

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

int main() {
    std::cout << square(5) << "\n";
}

Waarom dit belangrijk is

Als je weet dat een functie geen uitzondering kan werpen, kunnen de compiler en de bibliotheek optimaliseren — bijvoorbeeld door bij het groeien van een container verplaatsingen boven kopieën te kiezen.

Verplaatsingsbewerkingen moeten noexcept zijn

std::vector gebruikt je verplaatsingsconstructor bij het opnieuw toewijzen van opslag alleen als die noexcept is; anders kopieert de container voor de veiligheid. Geef verplaatsingen daarom de aanduiding noexcept.

struct Buffer {
    int* p;
    Buffer(Buffer&& o) noexcept : p(o.p) { o.p = nullptr; }
};

Destructors zijn standaard noexcept

Sinds C++11 zijn destructors impliciet noexcept. Als je een uitzondering uit een destructor laat ontsnappen, wordt het programma beëindigd.

Voorwaardelijke noexcept

noexcept(expr) laat de belofte afhangen van een booleaanse waarde tijdens het compileren — nuttig in sjablonen die de garantie van een ander type doorgeven.

template <class T>
void swapValues(T& a, T& b) noexcept(noexcept(T(std::move(a)))) {
    T tmp = std::move(a);
    a = std::move(b);
    b = std::move(tmp);
}

Opvragen met de operator noexcept

Als operator levert noexcept(expr) de waarde true op wanneer voor de expressie is verklaard dat die geen uitzondering werpt — handig in sjablonen.

#include <iostream>

int f() noexcept { return 1; }
int g() { return 2; }

int main() {
    std::cout << noexcept(f()) << " " << noexcept(g()) << "\n";  // 1 0
}

noexcept maakt deel uit van het type

Sinds C++17 maakt noexcept deel uit van het type van een functieaanwijzer, zodat een functie die uitzonderingen werpt niet aan een noexcept-aanwijzer kan worden gekoppeld.

Beloof niet te veel

Geef een functie alleen de aanduiding noexcept als je zeker weet dat die geen uitzondering kan werpen. Een valse belofte die wordt geschonden, laat het hele programma crashen.

Goede kandidaten

Wisselbewerkingen, verplaatsingsbewerkingen, destructors, eenvoudige uitleesfuncties en rekenhulpfuncties zijn natuurlijke noexcept-functies.

noexcept versus throw()

De oude dynamische specificatie throw() is verouderd en verwijderd. Gebruik in moderne C++ noexcept.

Prestaties en veiligheid

noexcept documenteert de bedoeling en maakt bovendien optimalisaties zoals verplaatsen bij herallocatie mogelijk — een kleine aanduiding met grote gevolgen.

Korte controle

Toets je begrip van noexcept.

Samenvatting

Je hebt geleerd dat de aanduiding noexcept belooft dat er geen uitzonderingen optreden, waardoor optimalisaties zoals verplaatsen bij het opnieuw toewijzen van opslag mogelijk worden. Geef verplaatsingsbewerkingen, wisselbewerkingen en destructors de aanduiding noexcept, gebruik voorwaardelijke vormen in sjablonen en beloof nooit te veel.

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 “noexcept-specificatie” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad C++ Academy, waaronder “noexcept-specificatie”, 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 “noexcept-specificatie”?

Markeer functies die geen exceptions werpen 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 “noexcept-specificatie”?

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. try, catch, throw
  2. Exceptionveiligheid
  3. noexcept-specificatie
  4. Aangepaste exceptiontypen
← Terug naar C++ Academy