J'ai des questions techniques. Dans cette fonction:
string report() const { if(list.begin() == list.end()){ throw "not good"; } //do something }
6 Réponses :
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. p>
Si vous lancez une exception, toutes les fonctions seront sorties au point où il trouve un Vérifiez https://isocpp.org/wiki/faq/exceptions pour plus d'informations . P> Essayez ... Catch Code> Block avec un
correspondant code> 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. P>
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 em> 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. P>
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 . P>
Cela ne reviendra pas, il finira en fait et atteint le "code" (Call-Stack-wise) Essayez ... Catch Code> 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). p>
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. P>
+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é.
Ceci peut-être un bon point de départ pour comprendre des exceptions. Traitement des exceptions en C ++ P>
Qu'est-ce que votre livre de texte C ++ a à dire à ce sujet?