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 :

Valeur par défaut pour une référence


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 35
    Points
    35
    Par défaut Valeur par défaut pour une référence
    Bonjour,

    est-ce que ça choque quelqu'un si j'écris quelque chose du style :

    void MyFunction( const string & defaultParam = "" );

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Ben non.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 35
    Points
    35
    Par défaut
    super merci, je voulais être sûr !

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Euh si. J'aurais préféré
    void MyFunction( string const & defaultParam = "" );

    Citation Envoyé par FAQ
    La règle est que le const s'applique toujours sur ce qui le précède. S'il n'y a rien avant, alors on inverse sa position avec ce qui est juste après.
    On préfère donc TYPE const qui est la règle à const TYPE qui est l'exception.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 35
    Points
    35
    Par défaut
    mais pour le retour des fonctions, c'est bien :
    const string & GetXXX() const;
    je me trompe ?

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    string const & getXXX() const, c'est kifkif

    Sinon, pour le param par défaut, moi je ferais
    void MyFunction( string const & defaultParam = *(string *)0 );
    gniarkgniarkgniark
    Meunon, c'est ceci bien sur:
    void MyFunction( const string & defaultParam = string() );

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Euh si. J'aurais préféré
    void MyFunction( string const & defaultParam = "" );

    On préfère donc TYPE const qui est la règle à const TYPE qui est l'exception.
    (meta-x mode-side-discussion-on)
    Étrangement, je suis en train d'écrire le contraire dans un article à paraitre sur mon blog. Mon opinion est que la notation qu'on utilise pour les références constantes se doit de suivre celle qu'on utilise pour les pointeurs vers des instances constantes. Hors, X const* p peut être aisément confondu avec X * const p par le néophyte, parce qu'il faut être honnête, ça n'est pas toujours facile pour s'y retrouver. SI, pour rendre le code moins brouillon, on utilise const X* p au lieu de X const* p, alors on utilise aussi const X& r au lieu de X const& r. Un effet de bord est que ça nous permet à nouveau de lire la déclaration de la gauche vers la droite, tout en réintroduisant une sémantique plus intuitive (mais (je l'accorde volontiers) moins formelle) de "type constant" et de "variables constantes". ainsi, const X* const p est une "variable constante de type pointeur vers un type constant". Ce n'est bien évidemment pas la panacée, mais étant donné qu'il est plus difficile de définir ce qu'est un pointeur constant (qu'est-ce qui est constant : la valeur du pointeur ou l'instance pointée ?) qu'une variable constante (la variable, c'est à dire dans ce cas la valeur du pointeur, ne peut pas être modifiée), ça me convient assez bien.

    Et puis ça a le mérite d'être cohérent avec les définitions des fonctions/méthodes de la C++SL telles que données dans le texte du standard lui-même, où la notation X const& r n'est pas utilisée.
    (meta-x mode-side-discussion-off)
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Dans les histoires de styles, on confronte plus souvent des opinions que des faits. Et par conséquent, on est susceptible d'avoir d'interminables débats .
    Mais quand même...
    Comprendre type fonction() const; est plus naturel si on intègre que le const s'applique à ce qui précède.
    Toujours avec la règle du 'précède', je trouve plus naturel de comprendre la différence entre type const * et type * const, que de faire le grand saut entre const type * et type * const.
    Mais pour être totalement franc, je pense que de toute façon, dès qu'on introduit un pointeur (c'est moins vrai avec la référence car elle n'est pas modifiable), on introduit du doute (par rapport à ce const, entre autre). Et in fine, je ne pense pas qu'un écriture plutôt que l'autre clarifie vraiment la chose. La meilleur règle est peut être encore ... d'avoir une constance d'écriture dans les projets.

  9. #9
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Citation Envoyé par Emmanuel Deloget
    Étrangement, je suis en train d'écrire le contraire dans un article à paraitre sur mon blog.
    Hourra !
    A bas la dictature des Type & const !
    Et je propose la motion suivante : Sera pendu haut et court, toute personne qui vient pinailler à chaque fois que l'on parle de référence constante "gnagnagna une référence est forcément constante gnagnagna".


  10. #10
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Citation Envoyé par Arzar Voir le message
    Hourra !
    A bas la dictature des Type & const !
    Et je propose la motion suivante : Sera pendu haut et court, toute personne qui vient pinailler à chaque fois que l'on parle de référence constante "gnagnagna une référence est forcément constante gnagnagna".

    juste un grand +1 :').

    Plus sérieusement, j'ai vraiment essayé l'écriture de 3Darchi T const& x, mais machinalement (ie quand je fais pas l'effort) je reviens toujours à l'autre écriture, du coup j'utilise plus que l'écriture 'sale' :p.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  11. #11
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par Goten Voir le message
    Plus sérieusement, j'ai vraiment essayé l'écriture de 3Darchi T const& x, mais machinalement (ie quand je fais pas l'effort) je reviens toujours à l'autre écriture, du coup j'utilise plus que l'écriture 'sale' :p.
    A vrai dire, depuis que j'ai appris qu'il s'appliquait à ce qui le précède et que j'en ai compris la raison (le code est, pour un groupe donné de mots/termes interprété de droite à gauche par le compilateur), j'ai pris l'habitude de placer const après sans même y penser...

    Je reconnais cependant, que rien n'aide forcément à prendre cette habitude dans le sens où l'intellisens, lorsqu'il présente la liste des arguments, et parfois même les messages d'erreurs/d'avertissement le placent régulièrement devant le type

    Ceci dit, j'ai quelque part l'impression que, pour beaucoup, les habitudes se forgent au gré de ce qu'ils rencontrent le plus souvent, et, comme il me semble qu'on rencontre, dans du code que l'on n'a pas écrit, plus souvent const type que type const, je peux comprendre que beaucoup prennent / gardent cette habitude, sans même jamais s'être posé la question de savoir ce que disait la norme sur le sujet.

    Comme, en plus, la norme n'est franchement pas le genre de truc qu'on peut lire comme s'il s'agissait d'un bon roman, on peut très facilement comprendre que pas mal de gens n'y poseront jamais un oeil
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 35
    Points
    35
    Par défaut
    Si on regarde dans le bouquin "Standards de programmation en c++" de Sutter & Alexandrescu, qui fait quand même office de référence, les exemples sont écrits de la manière suivante :
    const T &

    Après, tout dépend effectivement des habitudes que l'on a prise.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 35
    Points
    35
    Par défaut
    D'après la page suivante, la déclaration 'T const' a été introduite par Dan Sacks : "const s'applique toujours à ce qui le précède".
    http://fr.wikibooks.org/wiki/Program.../Les_pointeurs

    const char * msg; // déclaration habituelle
    char const * msg; // déclaration Sacks

  14. #14
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut
    Je suis personne, mais je contredis : c'est absolument inesthétique !







    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

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

Discussions similaires

  1. [EJB3 Entity] Valeur par défaut pour une colonne
    Par moha1984 dans le forum Java EE
    Réponses: 1
    Dernier message: 18/05/2009, 18h42
  2. Valeur par défaut pour une input box
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/12/2008, 15h54
  3. Réponses: 2
    Dernier message: 28/05/2007, 09h28
  4. Réponses: 2
    Dernier message: 23/05/2007, 14h05
  5. Réponses: 2
    Dernier message: 18/10/2003, 14h42

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