User Tools

Site Tools


in204:tds:sujets:td6:part2

This is an old revision of the document!


Partie II – Vérifier que les exceptions sont bien capturées.

TD6

L'objet des questions suivantes est de pouvoir vérifier au moment de la compilation que les exceptions sont bien capturées ou bien que seules les exceptions indiquées sont supposées être déclencheés (cf. les annotations relatives aux exceptions).

Question n°1

L’exception division_by_zero peut être levée par la fonction divide. Ajouter cette information à la fonction divide.

Correction

Correction

Nous considérons que l'exception division_by_zero n'est plus capturée par la fonction divide et est propagée aux fonctions appelantes.

Dans ce cas nous devons indiquer que la fonction divide peut générer une exception. Nous avons plusieurs possibilités pour le faire.

  • Indiquer que la fonction divide genére une exception de type division_by_zero.
    double divide(double, double) throw(division_by_zero);
  • Indiquer que la fonction divide genére une exception sans spécifier laquelle. Dans ce cas, les syntaxes suivantes sont équivalentes
    double divide(double, double) noexcept(false);
    double divide(double, double) throw(...);

Ceci nous donne en conséquence les codes suivants pour la méthode divide :

double divide(double theNumerator, double theDivisor) throw(division_by_zero)
{
    if(theDivisor == 0)
        throw division_by_zero();
    return theNumerator / theDivisor;
}

Jusqu'à la version C++14, nombreux étaient les compilateur qui considérait que :

double divide(double, double) throw(division_by_zero);

était equivalent à :

double divide(double, double) noexcept(false);

En fait les compilateur ne vérifiaient pas la nature des exceptions qui étaient capturées. De ce fait, depuis C++17, cette fonctionnalité a été déclarée comme “abandonnées” et désormais il est demandé de déclarer une fonction qui ne lève pas d'exception par : noexcept ou par noexcept(true) et une foncion qui lève une exception par soit noexcept(false) ou throw(…').

Question n°2

Compilez votre programme, que constatez-vous ?

Question n°3

Ajoutez les informations complémentaires à votre programme pour pouvoir compiler le programme ?

in204/tds/sujets/td6/part2.1572780146.txt.gz · Last modified: 2019/11/03 11:22 by bmonsuez