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

C++ Discussion :

throw dans un prototype


Sujet :

C++

Vue hybride

Bayard throw dans un prototype 08/12/2006, 18h48
hiko-seijuro cela veut dire tout bêtement... 08/12/2006, 19h09
roulious C'est une spécification... 08/12/2006, 19h21
Bayard hiko-seijuro -> Je n'ai pas... 08/12/2006, 22h11
roulious On trouve deux articles de... 08/12/2006, 22h18
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut throw dans un prototype
    Bonsoir,

    J'ai récupéré le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void ma_classe::operator()( std::string data) const
    throw( toto, titi )
    {
      ....
    }
    Je sais ce c'est qu'un opérateur.

    Je sais ce qu'est que l'émission d'une exception (throw())

    Ce que je ne comprends pas c'est à quoi sert le throw AVANT l'accolade.

    toto et titi sont des classes définies avant.

    Merci

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    cela veut dire tout bêtement que la méthode qui va appeller cet opératur de va fair un try catch sur l'eception. En gros tu propages l'eception

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    C'est une spécification d'exception : cela signifie que les exceptions que la fonction devrait lancer sont de type toto et titi. Si la fonction lance une exception d'un autre type, cela conduit à un appel à la fonction intégrée unexpected, qui elle meme appelle la fonction définie par un set_unexpected, ou, si set_unexpected n'a pas été appelé, lance un std::bad_exception.

    Le comportement de tout ce mécanisme est assez compliqué, donc mieux vaut faire attention si tu l'utilises.

  4. #4
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    hiko-seijuro -> Je n'ai pas compris. Les "eceptions" (peuchère) n'ont pas à être propagées. Elles se propagent toutes seules.
    roulious -> c'est assez clair. Existe-t-il un tutoriel à ce propos ?

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    On trouve deux articles de Sutter sur le sujet, http://www.gotw.ca/gotw/082.htm et http://www.gotw.ca/publications/mill22.htm qui déconseillent tous les deux l'utilisation.

    Je ne me souviens pas avoir vu des articles conseillant leur utilisation, si quelqu'un a un lien ça m'intéresse.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    C'est une espèce de mauvaise parodie des déclarations d'exceptions de Java.
    En C++, ça ne sert à rien, puisque ça ne peut jamais garantir que la fonction ainsi déclarée ne lancera pas d'exception non-spécifiée.
    Tout ce que ça fait, c'est changer le type de plantage (on passe de exception à unexpected() et ça nous fait une belle jambe).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. finally et throw dans le catch ?
    Par jph_void dans le forum C#
    Réponses: 7
    Dernier message: 25/03/2010, 17h13
  2. exception non levée malgré throw dans une boucle for
    Par marion5515 dans le forum Langage
    Réponses: 12
    Dernier message: 14/05/2009, 17h53
  3. besoin d'aide dans un prototype
    Par amigauss dans le forum C
    Réponses: 5
    Dernier message: 17/10/2006, 10h02
  4. Réponses: 6
    Dernier message: 22/06/2006, 19h33
  5. Réponses: 3
    Dernier message: 09/03/2006, 15h12

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