Sobes.tech
Middle+

Cosa succede se in una funzione contrassegnata come noexcept si verifica un'eccezione?

sobes.tech AI

Risposta dell'AI

Il programma verrà terminato immediatamente chiamando std::terminate(). Questo è un comportamento standard definito in C++ per gestire le eccezioni che escono dal scope di una funzione dichiarata come noexcept.

Le sezioni dello standard C++ relative a questo sono:

  • [except.spec] Specifica noexcept.
  • [except.terminate] Gestione tramite chiamata a std::terminate().

Esempio:

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

void f() noexcept {
    throw std::runtime_error("Si è verificato un errore nella funzione noexcept");
}

int main() {
    try {
        f();
    } catch (...) {
        // Questo blocco catch non sarà raggiunto
        std::cerr << "Eccezione catturata" << std::endl;
    }

    // Se f() lancerà un'eccezione, std::terminate() sarà chiamato prima di questa riga
    std::cout << "Il programma continua l'esecuzione (questo non verrà visualizzato)" << std::endl;

    return 0;
}

L'output di questo programma conterrà un messaggio dal gestore std::terminate(), che può dipendere dall'implementazione, ma di solito include informazioni sulla causa della terminazione.

terminate called after throwing an instance of 'std::runtime_error'
  what():  Si è verificato un errore nella funzione noexcept