+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Invité de passage
    Inscrit en
    novembre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : novembre 2005
    Messages : 4
    Points : 0
    Points
    0

    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 chevronné Avatar de befalimpertinent
    Profil pro
    Inscrit en
    avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : avril 2007
    Messages : 561
    Points : 707
    Points
    707

    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
    Invité de passage
    Inscrit en
    novembre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : novembre 2005
    Messages : 4
    Points : 0
    Points
    0

    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
    Supaéro-Cesure : CERN, departement IT
    Inscrit en
    juin 2006
    Messages
    2 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22

    Informations professionnelles :
    Activité : Supaéro-Cesure : CERN, departement IT

    Informations forums :
    Inscription : juin 2006
    Messages : 2 298
    Points : 3 963
    Points
    3 963

    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 Confirmé Sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    24 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 24 294
    Points : 34 586
    Points
    34 586

    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é Sénior
    Homme Profil pro Mathias Gaunard
    Ingénieur développement logiciels
    Inscrit en
    décembre 2003
    Messages
    3 550
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathias Gaunard
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : décembre 2003
    Messages : 3 550
    Points : 4 612
    Points
    4 612

    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 Confirmé Sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    24 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 24 294
    Points : 34 586
    Points
    34 586

    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! :
    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 Expert
    Avatar de poukill
    Inscrit en
    février 2006
    Messages
    2 153
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : février 2006
    Messages : 2 153
    Points : 2 054
    Points
    2 054

    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 émérite Avatar de HanLee
    Profil pro
    Inscrit en
    mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 27
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2004
    Messages : 738
    Points : 859
    Points
    859

    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é Sénior
    Homme Profil pro Mathias Gaunard
    Ingénieur développement logiciels
    Inscrit en
    décembre 2003
    Messages
    3 550
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathias Gaunard
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : décembre 2003
    Messages : 3 550
    Points : 4 612
    Points
    4 612

    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 Confirmé Sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    24 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 24 294
    Points : 34 586
    Points
    34 586

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •