Sobes.tech
Middle+

Was passiert, wenn in einer als noexcept gekennzeichneten Funktion eine Ausnahme ausgelöst wird?

sobes.tech KI

Antwort von AI

Das Programm wird sofort durch den Aufruf von std::terminate() beendet. Dies ist ein Standardverhalten, das in C++ für die Behandlung von Ausnahmen festgelegt ist, die über die Funktion hinausgehen, die als noexcept deklariert ist.

Die relevanten Abschnitte des C++-Standards dazu sind:

  • [except.spec] noexcept-Spezifikation.
  • [except.terminate] Behandlung durch Aufruf von std::terminate().

Beispiel:

#include <iostream>
#include <stdexcept>
#include <cstdlib> // Für std::terminate

void f() noexcept {
    throw std::runtime_error("Ein Fehler ist in der noexcept-Funktion aufgetreten");
}

int main() {
    try {
        f();
    } catch (...) {
        // Dieser catch-Block wird nicht erreicht
        std::cerr << "Ausnahme abgefangen" << std::endl;
    }

    // Wenn f() eine Ausnahme wirft, wird std::terminate() vor diesem Punkt aufgerufen
    std::cout << "Das Programm läuft weiter (wird nicht ausgegeben)" << std::endl;

    return 0;
}

Die Ausgabe dieses Programms enthält eine Nachricht des std::terminate()-Handlers, der je nach Implementierung variieren kann, aber in der Regel Informationen über den Grund der Beendigung enthält.

terminate called after throwing an instance of 'std::runtime_error'
  what():  Ein Fehler ist in der noexcept-Funktion aufgetreten