Quel est le comportement standard dans les cas où la fonction renvoie une exception et non une liste d'exceptions valide? Par exemple, quand je lance ce code:Spécification d'exception C++ - gestion des exceptions non valides
#include <iostream>
#include <cstdlib>
using namespace std;
void NotLegal() throw(char) {
throw 42;
}
void myunexpected() {
cout << "exception not in list\n";
cin.get();
exit(0);
}
int main()
{
set_unexpected(myunexpected);
try {
NotLegal();
}
catch(...) {
cout << "exception catched";
cin.get();
}
return 0;
}
Il se comporte différemment sur GCC et Visual Studio C++ compilateurs:
- Le VS 2010 ne exception attendue est attrapée en général gestionnaire d'exceptions.
- Sur GCC
unexpected()
, la fonction de gestionnaire est appelée à la place de l'exception d'interception.
Pourquoi cette différence? Pourquoi compilateur MS C++ n'appelle pas unexpected()
rappel?
avez-vous essayé de changer votre exemple? Juste pour être sûr que vous n'obtiendrez pas une conversion automatique entre 42 et un caractère. Essayez simplement throw() au lieu de throw (char). –
c'est la même chose avec une liste d'exceptions vide. –