IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

constexpr et exceptions


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Par défaut constexpr et exceptions
    Bonjour.

    Je découvre le monde merveilleux des constexpr de C++ 2011 et j'avais une petite question avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    inline constexpr unsigned long long int metaFactorial(const unsigned char n) 
    {
        return (((n > 0) && (n < 21)) ? (n*metaFactorial(n-1)) : (1));
    }
    Au lieu de renvoyer 1 quand n >= 21, j'aimerai que le code plante par exemple en lançant une exception standard (d'ailleurs question au passage pour quelqu'un qui découvre la gestion des erreurs : quelle est l'exception standard la plus adaptée dans ce cas, est-ce "domain_error"). Comment faire cela ?

    Merci beaucoup.

  2. #2
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Tu peux jeter une exception avec par exemple return n > 20 ? throw [exception] : [...]. (au début je croyais que c'était impossible, mais selon 7.5.1§5 ...)
    Je pense que domain_error est une bonne idée d'exception. Par contre, je ne sais pas si il sera possible de la jeter, étant donné que 19.2.2 ne l'indique pas comme ayant un constexpr constructor ... A voir !

    Sinon, tu as fait du lisp ? Presque toutes ces parenthèses sont inutiles, il suffirait de mettre return n > 0 && n < 21 ? n*metaFactorial(n-1) : 1; (ce que je trouve au passage plus compréhensible).

  3. #3
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Je ne comprends pas bien comment on peut lancer une exception dans une constexpr, puisque le principe est justement que ça soit executé à la compilation....

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Je vais peut être dire une bêtise, mais n'y a t-il pas des assertions contrôlées à la compilation.
    Sinon, nous avons de bons tutoriels sur la méta-programmation : http://cpp.developpez.com/cours/?page=general#avances
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Citation Envoyé par Klaim Voir le message
    Je ne comprends pas bien comment on peut lancer une exception dans une constexpr, puisque le principe est justement que ça soit executé à la compilation....
    Je suppose que c'est rapporté comme une erreur de compilation ? (pour ma référence, 7.5.1§5 de la dernière norme pré-c++11 -- non, je ne vais pas me payer le standard alors qu'on a quasiment identique mais gratuit à côté)

    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    Je vais peut être dire une bêtise, mais n'y a t-il pas des assertions contrôlées à la compilation.
    Sinon, nous avons de bons tutoriels sur la méta-programmation : http://cpp.developpez.com/cours/?page=general#avances
    Il me semble que l'OP parle de constexpr, ce qui n'est pas de la métaprog'.
    Ou bien j'ai mal compris ce message ?

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Ah ... donc ce sont deux choses fondamentalement différentes.

    puisque le principe est justement que ça soit executé à la compilation....
    Cela m'a mit dans l'erreur

    Qu'est ce que le contexpr du coup ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  2. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35
  3. Réponses: 3
    Dernier message: 01/11/2002, 14h30
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo