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 :

Passage par référence vs. passage par pointeur


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Passage par référence vs. passage par pointeur
    Bonjour tout le monde,

    Si il y avait un degré 0 en C++, je pense que je servirais d'origine Blague à part, j'ai fait du C il y a bien longtemps et j'ai beaucoup de mal à m'y remettre.

    J'ai une question plutôt bête au sujet des pointeurs et des paramètres de fonctions. Dans cet article (http://fr.wikibooks.org/wiki/Program.../Les_pointeurs) ils parlent de passage de paramètre par pointeur et de passage de paramètre par référence.

    1ere question : y a t il une véritable différence entre ces 2 méthodes ?

    Dans cet article, ils disent que le passage par référence est privilégié. Ce qui me fait croire que les méthodes sont identiques. Malgré tout, dans tout les exemples que je vois sur le net c'est à 95% le passage par pointeur qui est utilsé, et dans le code que je lis dans ma boite, c'est que du passage par référence ?!

    Toujours dans le même esprit, concernant la modification de variable je voulais savoir qu'elle est la "bonne" méthode :
    1. B* ConvertAToB(const A& a);
    2. B& ConvertAToB(const A& a);
    3. void ConvertAToB(const A& a, B& b);
    4. ... et toutes les variantes avec passage par référence/pointeur

    Merci par avance.

    Tim

  2. #2
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    un ptit tour du côté de la t'apporteras sans doute pas mal de réponses:
    comme :
    Quand utiliser des références et quand utiliser des pointeurs
    Linux > *

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Cool, j'avais pas vu

    Bon, j'en conclue qu'il vaut mieux utiliser les références. Mais alors pourquoi tout les exemples n'utilise t il pas les références ?!

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Va faire un tableau de référence ! Ce n'est pas possible
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En fait, dès qu'il est question d'allocation dynamique (et de new, donc), il devient nécessaire d'utiliser des pointeurs.
    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.

  6. #6
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    Du beau code C++ n'utilise jamais de pointeurs à part dans des détails d'implémentation bas niveau, et dans quelques cas particuliers.

    Utilise les références. C'est plus sûr, la syntaxe et plus légère et ça binde même sur les temporaires, et ça propage mieux const.
    Boost ftw

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    N'empêche, si je suis un jour prof et que je vois un élève faire ceci ou un truc similaire, il va m'entendre :
    Code avec références! : Sélectionner tout - Visualiser dans une fenêtre à part
    UneClasse & obj = *(new UneClasse());

    Et en quoi exactement une référence propage-t-elle "mieux" const qu'un pointeur?
    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.

  8. #8
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Les pointeurs sont quand même obligatoire dans pas mal de cas. L'implémentation du pattern stratégie en est un exemple. Tout ce que tu ne connais pas à l'avance et qui est susceptible de changer. Car une référence est fixe.

  9. #9
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    Citation Envoyé par poukill Voir le message
    L'implémentation du pattern stratégie en est un exemple.
    Ben, avec std::tr1::function, plus vraiment! (évidemment, en interne ce sont des pointeurs).

  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
    Points : 4 625
    Points
    4 625
    Par défaut
    Et en quoi exactement une référence propage-t-elle "mieux" const qu'un pointeur?
    Parce que y'a la constance du pointeur lui-même et la constance du pointé, et qu'en général c'est la constance du pointé qui t'intéresse (voire les deux), pas l'inverse.
    Quand tu as un pointeur comme variable membre par exemple ça peut poser problème.
    Boost ftw

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si c'est de ça que tu parles, ça compile sans warning ni erreur sous gcc 3.4.2 et sous Visual 2005:
    Code C++ : 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
    class UneClasse
    {
    public:
    	int &uneReference;
     
    	UneClasse(int &r) : uneReference(r) {}
    };
     
    int main(void)
    {
    	int a;
    	const UneClasse unObj(a);
    	unObj.uneReference = 42;
     
    	return 0;
    }
    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.

Discussions similaires

  1. [XL-2010] Passage crossprojet d'un workbook par référence
    Par oasisllc dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/01/2013, 10h42
  2. Réponses: 6
    Dernier message: 18/05/2012, 12h07
  3. Passage par référence versus par pointeur
    Par Seabast888 dans le forum Débuter
    Réponses: 14
    Dernier message: 14/09/2009, 18h17
  4. [pointeur][passage par référence] Perte des valeurs.
    Par ced600 dans le forum Débuter
    Réponses: 13
    Dernier message: 05/09/2008, 18h44
  5. Passage par référence/pointeur
    Par NiamorH dans le forum C++
    Réponses: 5
    Dernier message: 15/07/2008, 10h05

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