Différences entre les versions de « Programmation C++/Les exceptions »

m
<source> -> <syntaxhighlight> (phab:T237267)
m (<source> -> <syntaxhighlight> (phab:T237267))
 
Le lancement se fait par l'instruction <code>throw</code> :
 
<sourcesyntaxhighlight lang="cpp"> throw 0;</sourcesyntaxhighlight>
 
== Attraper une exception ==
 
Les instructions <code>try</code> et <code>catch</code> sont utilisées pour attraper les exceptions.
<sourcesyntaxhighlight lang="cpp">
try {
... // code lançant une exception (appel de fonction, ...)
cerr << "Exception " << code << endl;
}
</syntaxhighlight>
</source>
 
Exemple de fonction lançant une exception :
<sourcesyntaxhighlight lang="cpp">
int division(int a, int b)
{
}
}
</syntaxhighlight>
</source>
 
== Attraper toutes les exceptions ==
 
Spécifier les points de suspension dans la clause <code>catch</code> permet d'attraper tous les autres types d'exception :
<sourcesyntaxhighlight lang="cpp">
void main()
{
}
}
</syntaxhighlight>
</source>
 
== Déclaration des exceptions lancées ==
 
La déclaration d'une fonction lançant un nombre limité de type d'exception, telle que la fonction <code>division</code> de l'exemple précédent, peut être suivie d'une liste de ces types d'exceptions dans une clause <code>throw</code> :
<sourcesyntaxhighlight lang="cpp">
int division(int a, int b) throw(int)
{
else return a / b;
}
</syntaxhighlight>
</source>
 
Par défaut, la fonction peut lancer n'importe quel type d'exception. La déclaration de la fonction <code>division</code> sans clause <code>throw</code> est donc équivalent à la déclaration suivante :
<sourcesyntaxhighlight lang="cpp">
int division(int a, int b) throw(...) // n'importe quel type d'exception
{
return a / b;
}
</syntaxhighlight>
</source>
 
Si une fonction ne lance aucune exception, on peut la déclarer avec une clause <code>throw</code> vide :
<sourcesyntaxhighlight lang="cpp">
int addition(int a, int b) throw() // aucune exception
{
return a+b;
}
</syntaxhighlight>
</source>
 
Cette clause peut être présente dans les cas suivants :
Il est possible de fournir sa propre fonction <code>std::terminate()</code> appelée en cas d'exception non attrapée, grâce à <code>std::set_terminate()</code>.
 
<sourcesyntaxhighlight lang="cpp">
#include <exception>
#include <iostream>
return 0;
}
</syntaxhighlight>
</source>
 
<!-- à compléter:
1 535

modifications