Sobes.tech
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] noexcept specificatie.
  • [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