Middle+
Wat gebeurt er als er een uitzondering wordt geworpen in een functie gemarkeerd als noexcept?
sobes.tech AI
Antwoord van AI
Het programma wordt onmiddellijk beëindigd door de aanroep van std::terminate(). Dit is standaardgedrag dat in C++ is vastgesteld voor het afhandelen van uitzonderingen die buiten de scope van een met noexcept gedeclareerde functie treden.
De relevante secties van de C++-standaard hierover zijn:
- [except.spec]
noexceptspecificatie. - [except.terminate] Afhandeling door aanroep van
std::terminate().
Voorbeeld:
#include <iostream>
#include <stdexcept>
#include <cstdlib> // Voor std::terminate
void f() noexcept {
throw std::runtime_error("Er is een fout opgetreden in de noexcept-functie");
}
int main() {
try {
f();
} catch (...) {
// Deze catch-blok wordt niet bereikt
std::cerr << "Uitzondering opgevangen" << std::endl;
}
// Als f() een uitzondering gooit, wordt std::terminate() vóór deze regel aangeroepen
std::cout << "Het programma gaat verder (dit wordt niet weergegeven)" << std::endl;
return 0;
}
De uitvoer van dit programma bevat een bericht van de std::terminate()-handler, die afhankelijk kan zijn van de implementatie, maar meestal informatie bevat over de reden van beëindiging.
terminate called after throwing an instance of 'std::runtime_error'
what(): Er is een fout opgetreden in de noexcept-functie