Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/06/2008, 14h58   #1
timbob
Invité de passage
 
Inscription : 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
timbob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 15h29   #2
befalimpertinent
Membre chevronné
 
Avatar de befalimpertinent
 
Inscription : avril 2007
Messages : 561
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : avril 2007
Messages : 561
Points : 689
Points : 689
Envoyer un message via MSN à befalimpertinent
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 > *
befalimpertinent est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 16h29   #3
timbob
Invité de passage
 
Inscription : novembre 2005
Messages : 4
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 4
Points : 0
Points : 0
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 ?!
timbob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 17h04   #4
Davidbrcz
Rédacteur
 
Avatar de Davidbrcz
 
Homme
2A Supaéro
Inscription : juin 2006
Messages : 2 116
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21

Informations professionnelles :
Activité : 2A Supaéro

Informations forums :
Inscription : juin 2006
Messages : 2 116
Points : 3 154
Points : 3 154
Envoyer un message via MSN à Davidbrcz
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 la STL (en) Why linux is better (fr)
Davidbrcz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 17h07   #5
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 396
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

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

Informations forums :
Inscription : septembre 2005
Messages : 22 396
Points : 32 049
Points : 32 049
Envoyer un message via MSN à Médinoc
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.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 22h13   #6
loufoque
Expert Confirmé Sénior
 
Homme Mathias Gaunard
Ingénieur développement logiciels
Inscription : 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 603
Points : 4 603
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
loufoque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 09h13   #7
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 396
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

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

Informations forums :
Inscription : septembre 2005
Messages : 22 396
Points : 32 049
Points : 32 049
Envoyer un message via MSN à Médinoc
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.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 09h26   #8
poukill
Rédacteur/Modérateur
 
Avatar de poukill
 
Inscription : février 2006
Messages : 2 152
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : février 2006
Messages : 2 152
Points : 1 891
Points : 1 891
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.
__________________
FAQ C++ | Page personnelle | Une bonne adresse
poukill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 12h07   #9
HanLee
Membre émérite
 
Avatar de HanLee
 
Inscription : mai 2004
Messages : 738
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 738
Points : 829
Points : 829
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).
HanLee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 13h35   #10
loufoque
Expert Confirmé Sénior
 
Homme Mathias Gaunard
Ingénieur développement logiciels
Inscription : 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 603
Points : 4 603
Citation:
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
loufoque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2008, 14h16   #11
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 396
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

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

Informations forums :
Inscription : septembre 2005
Messages : 22 396
Points : 32 049
Points : 32 049
Envoyer un message via MSN à Médinoc
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.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h03.


 
 
 
 
Partenaires

Hébergement Web