noexcept-specificatie
Markeer functies die geen exceptions werpen
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.
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
- try, catch, throw
- Exceptionveiligheid
- noexcept-specificatie
- Aangepaste exceptiontypen