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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    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 Expert

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

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    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
    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
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

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

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    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
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    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
    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 Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    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".


+ 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