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 :

passage par référence d'un argument optionnel


Sujet :

Langage C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 46
    Par défaut passage par référence d'un argument optionnel
    Bonjour,

    comment s'y prendre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double MyFunction( const double & x=???);
    double MyFunction( const MyClass & x=???);
    j'ai vu que NULL est définie en C++ de la manière suivante:
    #define NULL 0

    dans quels cas l'utiliser pour initialiser des variables? est ce que NULL est définie pour uniquement les pointeurs?

    merci

  2. #2
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Tu ne peux pas "optionaliser" un paramètre passé par référence.

    Tu peux par contre lui attribuer une valeure par défaut, par exemple ici 0.0 pour un double. Par contre tu ne sauras pas si la personne a passé 0 ou si c'est le paramètre par défaut.

    NULL, sous la plupart des compilateurs, c'est l'entier 0, mais il est à utiliser exclusivement avec les pointeurs. Tu ne devrais jamais assigner NULL à une variable autre que pointeur.

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Une alternative est de définir une surcharge de la fonction sans arguments.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 46
    Par défaut
    merci pour vos réponses

  5. #5
    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
    Il m'arrive parfois de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
     
    maFonction( const std::string& param = std::string() );

    Il me semble que ça ne marche pas dans tous les contextes par contre, mais je ne me souviens plus dans lesquels ça ne marche pas.

    Une autre alternative que j'utilise est d'avoir une static const déclarée avant la fonction et de l'utiliser comme valeur par défaut (ce qui permet aussi d'avoir une même valeur par défaut pour plusieurs fonctions):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Machin
    {
        static const std::string NO_NAME; // definition dans le cpp
     
        Machin( const std::string& name = NO_NAME ); 
    };

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par JulienDuSud Voir le message
    Tu ne peux pas "optionaliser" un paramètre passé par référence.

    Tu peux par contre lui attribuer une valeure par défaut, par exemple ici 0.0 pour un double. Par contre tu ne sauras pas si la personne a passé 0 ou si c'est le paramètre par défaut.

    NULL, sous la plupart des compilateurs, c'est l'entier 0, mais il est à utiliser exclusivement avec les pointeurs. Tu ne devrais jamais assigner NULL à une variable autre que pointeur.
    D'autant plus que NULL ne vaut pas forcément toujours 0...

    Au mieux peut on estimer qu'il prend une valeur reconnue par le compilateur comme étant une adresse invalide.

    Ainsi, il me semble que NULL vaut 0xC0000000 en version debug sous visual studio (ou est-ce, simplement, la valeur prise lorsqu'il n'a pas encore été initialisé )
    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

  7. #7
    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
    Bonjour,
    Boost.Optional en permettant de gérer les variables invalides permet le passage de références non initialisées.

  8. #8
    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
    Citation Envoyé par koala01 Voir le message
    Ainsi, il me semble que NULL vaut 0xC0000000 en version debug sous visual studio (ou est-ce, simplement, la valeur prise lorsqu'il n'a pas encore été initialisé )
    NULL vaut bien zéro sous Visual. Ce sont les variables locales non-initialisées qui valent 0xCCCCCCCC (quand aux données non-initialisées du tas, elles valent 0xCDCDCDCD)
    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. Réponses: 5
    Dernier message: 21/03/2012, 18h12
  2. Passage par copie vs passage par référence
    Par bolhrak dans le forum C++
    Réponses: 11
    Dernier message: 20/08/2006, 23h37
  3. Réponses: 4
    Dernier message: 26/12/2005, 17h01
  4. Passage par référence
    Par difficiledetrouver1pseudo dans le forum Langage
    Réponses: 9
    Dernier message: 28/09/2005, 11h17
  5. Problème très rapide de passage par référence
    Par Noxexplorer dans le forum ASP
    Réponses: 2
    Dernier message: 23/06/2005, 10h02

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