Y a-t-il une différence essentielle entre les exceptions générées par le débogage normal (comme indiqué dans l'image) et les exceptions try qui sont utilisées pour juger si la saisie de l'utilisateur est correcte ou non ? C++ inclut le premier, ou est-ce seulement le second ? Qui ?
Par quoi la première exception mentionnée ci-dessus est-elle jugée ? Par exemple, la violation d'accès dans l'image, est-elle jugée par le compilateur ou d'autres outils de l'EDI ?
@Evian Ce que tu as dit est logique, laisse-moi faire un supplément
Les exceptions en C++ ne peuvent intercepter que les exceptions levées par C++. Pour faire simple, il ne peut intercepter que les exceptions générées par lui-même (non limité au code que vous écrivez, mais également à la bibliothèque d'exécution).
En fait, l'exception levée par C++ n'est pas une véritable exception, car elle est simplement définie et prévisible. La véritable exception n'est déclenchée par le CPU qu'après l'exécution, c'est-à-dire l'exception levée par le matériel.
Le matériel ne se souciera pas directement du c++, ce sera au système d'exploitation de le gérer. Compte tenu des différents systèmes d'exploitation, la gestion des exceptions est également incohérente - mais elles ne sont pas transmises au langage de niveau supérieur.
Prenons comme exemple la gestion relativement complète des exceptions Windows, cela
Laissez-le au débogueur (le processus doit être débogué)
Exécuter VEH
Exécuter SEH
TopLevelEH (le processus ne sera pas exécuté lorsqu'il sera débogué)
Laissez-le au débogueur (la gestion des exceptions ci-dessus indiquait qu'il ne pouvait pas être géré, alors je l'ai remis à nouveau au débogueur)
Notification du port d'exception d'appel csrss.exe
Les violations de lecture de mémoire sont déterminées par le matériel puis transmises au système d'exploitation pour traitement. (Je ne connais pas grand-chose au C++, mais ce n'est pas une exception C++, mais une exception levée par Windows.)
Je n'ai pas compris votre point de vue. Certaines bibliothèques ont des classes d'exception intégrées, et vous pouvez également personnaliser les classes d'exception. En fin de compte, elles héritent toutes de
std::exception
. De plus, il s'agit d'une exception d'exécution et n'a rien à voir avec le compilateur ou l'EDI.