9
votes

Que se passe-t-il quand je jette une exception?

J'ai des questions techniques. Dans cette fonction:

string report() const {
    if(list.begin() == list.end()){
        throw "not good";
    }
    //do something
}


1 commentaires

Qu'est-ce que votre livre de texte C ++ a à dire à ce sujet?


6 Réponses :


3
votes

Votre fonction se terminera immédiatement et cela ne renverra rien. S'il n'y a pas de déclarations de capture attrapant l'exception "dans la chaîne d'appels", votre application se terminera.


0 commentaires

14
votes

Si vous lancez une exception, toutes les fonctions seront sorties au point où il trouve un Essayez ... Catch Block avec un correspondant Type. Si votre fonction n'est pas appelée à partir d'un bloc d'essai, le programme quitte avec une exception non gérée.

Vérifiez https://isocpp.org/wiki/faq/exceptions pour plus d'informations .


0 commentaires

6
votes

Il va fondamentalement monter la pile jusqu'à ce qu'il trouve un gestionnaire d'exception; Si cela arrive à la fin de la pile sans en trouver un, votre programme s'écrasera. Si cela est en trouve un, il rembobinera la pile de ce point, exécutez le gestionnaire et continuez avec le code après le bloc de manutention, mais de loin votre pile qui peut être.

Vous pouvez obtenir toutes sortes de détails sur le mécanisme de traitement des exceptions de C ++ via Google. Voici une tête de départ .


0 commentaires

1
votes

Cela ne reviendra pas, il finira en fait et atteint le "code" (Call-Stack-wise) Essayez ... Catch Block. Si personne ne se trouve, la plupart du temps du programme se ferme juste, sur certaines plates-formes, l'erreur peut être imprimée, je ne connais pas les détails de cela (et les seuls probablement que ceux dérivés de STD :: Exception).


0 commentaires

4
votes

Puisque vous n'atteignez pas l'exception dans le contexte de la fonction, la fonction se terminera et la pile sera déroulée car elle recherchera un gestionnaire d'exception (un bloc de capture qui correspondrait à la chaîne ou à la prise générique ( ...))). S'il n'en trouve pas un, votre programme se terminera.


2 commentaires

+1 pour y compris la mention de se détendre. Comprend des choses comme des objets alloués auront des destructeurs appelés.


La pile déroulant ne commence pas avant que le bloc de capture soit trouvé.



1
votes

Ceci peut-être un bon point de départ pour comprendre des exceptions. Traitement des exceptions en C ++


0 commentaires