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