Sobes.tech
Middle+

Ce se întâmplă dacă într-o funcție marcată ca noexcept apare o excepție?

sobes.tech AI

Răspuns de la AI

Programul va fi încheiat imediat prin apelarea std::terminate(). Acesta este comportamentul standard definit în C++ pentru gestionarea excepțiilor care ies din funcția declarată ca noexcept.

Secțiunile standardului C++ relevante pentru aceasta sunt:

  • [except.spec] Specificația noexcept.
  • [except.terminate] Tratarea prin apelarea std::terminate().

Exemplu:

#include <iostream>
#include <stdexcept>
#include <cstdlib> // Pentru std::terminate

void f() noexcept {
    throw std::runtime_error("A apărut o eroare în funcția noexcept");
}

int main() {
    try {
        f();
    } catch (...) {
        // Acest bloc catch nu va fi atins
        std::cerr << "Excepție prinsă" << std::endl;
    }

    // Dacă f() aruncă o excepție, std::terminate() va fi apelat înainte de această linie
    std::cout << "Programul continuă execuția (nu va fi afișat)" << std::endl;

    return 0;
}

Ieșirea acestui program va conține un mesaj de la handler-ul std::terminate(), care poate depinde de implementare, dar în mod obișnuit include informații despre motivul încheierii.

terminate called after throwing an instance of 'std::runtime_error'
  what():  A apărut o eroare în funcția noexcept