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++

  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 397
    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 397
    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.

  7. #7
    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
    C'est clair.

    Merci � tous.

  8. #8
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    go to terminate(), go directly to terminate(), do not pass catch, do not collect $200.
    J'adore cet article
    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.

  9. #9
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Citation Envoy� par M�dinoc
    C'est une esp�ce de mauvaise parodie des d�clarations d'exceptions de Java.
    Pour paroder, il faut pas arriver en premier;
    En fait, je ne suis pas s�r qu'il y ait beaucoup de bonnes justifications pour les utiliser. Quoique, j'ai crois� un document qualit� qui savait parfaitement comment cela fonctionnait et qui pourtant demandait � ce que l'on utilise ces fichues specifications d'exceptions.

    Disons que si je devais m'en servir, ce serait de cette fa�on:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void f() 
    #if defined(DEBUG)
    throw( TotoException )
    #endif
    {
       try {
          code ...
       } 
       catch( TotoException const&) { throw ;}
       catch( std::exception const& e ) {
           throw TotoException(__FILE__, __LINE__, e.what());
       }
        catch( ... ) { // en fait, redondant avec la spec d'exception
           assert(! "Unexcepted exception in f()");
           throw TotoException(__FILE__, __LINE__, "Unexcepted exception in f()");
           // autant dire qu'en mode release, cela ne plante pas, mais on n'a pas 
           // la moindre idée de ce qui s'est passé => on n'est vraiment pas
           // avancés.
        }
     
    }
    Comme vous le voyez, c'est p�nible, pas tr�s propre. Et c'est pour ceux qui pr�f�rent les cores aux appels de terminate et autre unexpected. Sans compter que dans certaines fonctions, ce n'est pas tr�s grave, voire on pr�f�re ne pas transformer une exception. Tandis que dans d'autres fonctions, il est imp�ratif de tout intercepter -> fonctions d'interface.
    Bref, non seulement je ne m'en sers pas, mais en plus, je les vire du code dont j'ai repris la maitenance.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  10. #10
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    �a peut servir pour du code exp�rimental que ne doit jamais propager la moindre exception sous peine de comportement ind�fini.

+ 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