Sobes.tech
Middle+

Que se passe-t-il si une exception est levée dans une fonction marquée comme noexcept?

sobes.tech IA

Réponse de l'IA

Le programme sera immédiatement terminé par l'appel à std::terminate(). C'est un comportement standard défini en C++ pour gérer les exceptions qui dépassent la portée de la fonction déclarée comme noexcept.

Les sections du standard C++ relatives à cela sont :

  • [except.spec] Spécification noexcept.
  • [except.terminate] Gestion par appel à std::terminate().

Exemple :

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

void f() noexcept {
    throw std::runtime_error("Une erreur est survenue dans la fonction noexcept");
}

int main() {
    try {
        f();
    } catch (...) {
        // Ce bloc catch ne sera pas atteint
        std::cerr << "Exception attrapée" << std::endl;
    }

    // Si f() lance une exception, std::terminate() sera appelé avant cette ligne
    std::cout << "Le programme continue (ce message ne sera pas affiché)" << std::endl;

    return 0;
}

La sortie de ce programme contiendra un message du gestionnaire std::terminate(), qui peut dépendre de l'implémentation, mais inclut généralement des informations sur la raison de la terminaison.

terminate called after throwing an instance of 'std::runtime_error'
  what():  Une erreur est survenue dans la fonction noexcept