Je sais ce qu'est un pointeur , mais c'est le pourquoi on a ajouté le passage par référence au c++ alors qu'il existé deja la passage par adresse.
Pourquoi pas ? On peut tout faire avec une boucle do {} while(); et pourtant on a ajouté un repeat et un for.
y a til des choses que le passage par référence peut faire que le passage par adresse nepeut pas ?
Une référence ne peut pas être nulle. Cela donne une information en plus pour le programmeur.
Marc Boyer -- Je ne respecte plus le code de la route à vélo depuis une double fracture due au fait que j'étais le seul à le respecter.
Pierre Maurette
"news.free.fr" a écrit:
bonjour , je cherche a savoir quel est la différence entre une passage par référence et un passage par adresse.
Je sais ce qu'est un pointeur , mais c'est le pourquoi on a ajouté le passage par référence au c++ alors qu'il existé deja la passage par adresse. [Ma réponse n'est pas, loin de là, celle d'un spécialiste, mais celle
de quelqu'un qui s'est lui-même posé ces questions. Donc, indulgence par rapport aux approximations et erreurs SVP]
Je ne suis pas trop favorable au terme "passage par adresse". Historiquement, le C a fourni la base (non objet) du C++. Il n'existait qu'une seule façon de passer des paramètres à une fonction, c'était (et c'est toujours) le passage de valeurs (typées). Passer par valeur des variables de type pointeur permet de faire tout ce qui se fait dans d'autres langages en utilisant le "passage par variable".
C++ crée un type dérivé, la reference. C'est d'après moi une façon d'introduire l'idée de passage (et retour) par variable en conservant la définition originales des fonctions (une entourloupe ?). On écrit simplement qu'une fonction reçoit ou renvoie la valeur d'une variable (très très spéciale) d'une variable de type reference.
Toute tentative d'exemplifier la notion de référence en dehors du contexte d'une fonction conduit AMHA à une incompréhension. On peut bien entendu faire tourner du code, mais son inutilité est flagrante et gêne "l'apprenti".
J'aime bien voir une reference comme un objet du dialogue programmeur-compilateur, n'ayant à la différence du pointeur aucune réalité dans l'exécutable. D'ailleurs, c'est le plus souvent par un pointeur que le compilateur va résoudre une reference. On met là le doigt sur la différence entre C et C++ au plan de l'abstraction.
y a til des choses que le passage par référence peut faire que le passage par adresse nepeut pas ? Je ne vois pas d'exemple de passage par reference qui ne pourrait pas
être résolus de façon traditionnelle par un pointeur (mais ça doit bien exister). Regardez plutôt du coté des reference en retour, en particulier dans l'écriture des opérateurs.
-- Pierre
"news.free.fr" <magus@free.fr> a écrit:
bonjour , je cherche a savoir quel est la différence entre une passage par
référence et un passage par adresse.
Je sais ce qu'est un pointeur , mais c'est le pourquoi on a ajouté le
passage par référence au c++ alors qu'il existé deja la passage par adresse.
[Ma réponse n'est pas, loin de là, celle d'un spécialiste, mais celle
de quelqu'un qui s'est lui-même posé ces questions. Donc, indulgence
par rapport aux approximations et erreurs SVP]
Je ne suis pas trop favorable au terme "passage par adresse".
Historiquement, le C a fourni la base (non objet) du C++. Il
n'existait qu'une seule façon de passer des paramètres à une fonction,
c'était (et c'est toujours) le passage de valeurs (typées).
Passer par valeur des variables de type pointeur permet de faire tout
ce qui se fait dans d'autres langages en utilisant le "passage par
variable".
C++ crée un type dérivé, la reference. C'est d'après moi une façon
d'introduire l'idée de passage (et retour) par variable en conservant
la définition originales des fonctions (une entourloupe ?). On écrit
simplement qu'une fonction reçoit ou renvoie la valeur d'une variable
(très très spéciale) d'une variable de type reference.
Toute tentative d'exemplifier la notion de référence en dehors du
contexte d'une fonction conduit AMHA à une incompréhension. On peut
bien entendu faire tourner du code, mais son inutilité est flagrante
et gêne "l'apprenti".
J'aime bien voir une reference comme un objet du dialogue
programmeur-compilateur, n'ayant à la différence du pointeur aucune
réalité dans l'exécutable. D'ailleurs, c'est le plus souvent par un
pointeur que le compilateur va résoudre une reference. On met là le
doigt sur la différence entre C et C++ au plan de l'abstraction.
y a til des choses que le passage par référence peut faire que le passage
par adresse nepeut pas ?
Je ne vois pas d'exemple de passage par reference qui ne pourrait pas
être résolus de façon traditionnelle par un pointeur (mais ça doit
bien exister). Regardez plutôt du coté des reference en retour, en
particulier dans l'écriture des opérateurs.
bonjour , je cherche a savoir quel est la différence entre une passage par référence et un passage par adresse.
Je sais ce qu'est un pointeur , mais c'est le pourquoi on a ajouté le passage par référence au c++ alors qu'il existé deja la passage par adresse. [Ma réponse n'est pas, loin de là, celle d'un spécialiste, mais celle
de quelqu'un qui s'est lui-même posé ces questions. Donc, indulgence par rapport aux approximations et erreurs SVP]
Je ne suis pas trop favorable au terme "passage par adresse". Historiquement, le C a fourni la base (non objet) du C++. Il n'existait qu'une seule façon de passer des paramètres à une fonction, c'était (et c'est toujours) le passage de valeurs (typées). Passer par valeur des variables de type pointeur permet de faire tout ce qui se fait dans d'autres langages en utilisant le "passage par variable".
C++ crée un type dérivé, la reference. C'est d'après moi une façon d'introduire l'idée de passage (et retour) par variable en conservant la définition originales des fonctions (une entourloupe ?). On écrit simplement qu'une fonction reçoit ou renvoie la valeur d'une variable (très très spéciale) d'une variable de type reference.
Toute tentative d'exemplifier la notion de référence en dehors du contexte d'une fonction conduit AMHA à une incompréhension. On peut bien entendu faire tourner du code, mais son inutilité est flagrante et gêne "l'apprenti".
J'aime bien voir une reference comme un objet du dialogue programmeur-compilateur, n'ayant à la différence du pointeur aucune réalité dans l'exécutable. D'ailleurs, c'est le plus souvent par un pointeur que le compilateur va résoudre une reference. On met là le doigt sur la différence entre C et C++ au plan de l'abstraction.
y a til des choses que le passage par référence peut faire que le passage par adresse nepeut pas ? Je ne vois pas d'exemple de passage par reference qui ne pourrait pas
être résolus de façon traditionnelle par un pointeur (mais ça doit bien exister). Regardez plutôt du coté des reference en retour, en particulier dans l'écriture des opérateurs.
-- Pierre
Andre Heinen
On Mon, 22 Nov 2004 11:53:43 +0100, "news.free.fr" wrote:
bonjour , je cherche a savoir quel est la différence entre une passage par référence et un passage par adresse.
Les pointeurs ne conviennent pas pour la surcharge des opérateurs. Il vaut mieux utiliser des références dans ce cas.
On ne peut pas utiliser de références dans les conteneurs de la bibliothèque standard. Dans ce cas, il faut utiliser des pointeurs. Par exemple, il faut utiliser vector<X*> au lieu de vector<X&>.
Il est garanti qu'une référence "pointe" toujours sur quelque chose. Elle ne peut pas être nulle. Il est préférable d'utiliser des références sauf si on a besoin de la valeur nulle.
Une référence, une fois initialisée, ne peut plus être modifiée pour "pointer" sur un autre objet. Il vaut mieux utiliser les références sauf si on a besoin de changer l'objet pointé (p. ex. arithmétique de pointeurs).
Si une fonction modifie son argument, certains programmeurs trouvent qu'il vaut mieux utiliser un pointeur parce que ça rend plus explicite le fait que la fonction peut modifier l'argument. Par exemple f(&i). D'autres programmeurs utilisent des références mais choisissent un nom de fonction explicite, par exemple modifier(i).
Va voir la FAQ de Stroustrup: http://www.research.att.com/~bs/bs_faq2.html#pointers-and-references Et aussi, bien sûr, la section 8 de la FAQ de ce groupe.
-- Andre Heinen My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
On Mon, 22 Nov 2004 11:53:43 +0100, "news.free.fr"
<magus@free.fr> wrote:
bonjour , je cherche a savoir quel est la différence entre une passage par
référence et un passage par adresse.
Les pointeurs ne conviennent pas pour la surcharge des
opérateurs. Il vaut mieux utiliser des références dans ce cas.
On ne peut pas utiliser de références dans les conteneurs de la
bibliothèque standard. Dans ce cas, il faut utiliser des
pointeurs. Par exemple, il faut utiliser vector<X*> au lieu de
vector<X&>.
Il est garanti qu'une référence "pointe" toujours sur quelque
chose. Elle ne peut pas être nulle. Il est préférable
d'utiliser des références sauf si on a besoin de la valeur nulle.
Une référence, une fois initialisée, ne peut plus être modifiée
pour "pointer" sur un autre objet. Il vaut mieux utiliser les
références sauf si on a besoin de changer l'objet pointé (p. ex.
arithmétique de pointeurs).
Si une fonction modifie son argument, certains programmeurs
trouvent qu'il vaut mieux utiliser un pointeur parce que ça rend
plus explicite le fait que la fonction peut modifier l'argument.
Par exemple f(&i).
D'autres programmeurs utilisent des références mais choisissent
un nom de fonction explicite, par exemple modifier(i).
Va voir la FAQ de Stroustrup:
http://www.research.att.com/~bs/bs_faq2.html#pointers-and-references
Et aussi, bien sûr, la section 8 de la FAQ de ce groupe.
--
Andre Heinen
My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
On Mon, 22 Nov 2004 11:53:43 +0100, "news.free.fr" wrote:
bonjour , je cherche a savoir quel est la différence entre une passage par référence et un passage par adresse.
Les pointeurs ne conviennent pas pour la surcharge des opérateurs. Il vaut mieux utiliser des références dans ce cas.
On ne peut pas utiliser de références dans les conteneurs de la bibliothèque standard. Dans ce cas, il faut utiliser des pointeurs. Par exemple, il faut utiliser vector<X*> au lieu de vector<X&>.
Il est garanti qu'une référence "pointe" toujours sur quelque chose. Elle ne peut pas être nulle. Il est préférable d'utiliser des références sauf si on a besoin de la valeur nulle.
Une référence, une fois initialisée, ne peut plus être modifiée pour "pointer" sur un autre objet. Il vaut mieux utiliser les références sauf si on a besoin de changer l'objet pointé (p. ex. arithmétique de pointeurs).
Si une fonction modifie son argument, certains programmeurs trouvent qu'il vaut mieux utiliser un pointeur parce que ça rend plus explicite le fait que la fonction peut modifier l'argument. Par exemple f(&i). D'autres programmeurs utilisent des références mais choisissent un nom de fonction explicite, par exemple modifier(i).
Va voir la FAQ de Stroustrup: http://www.research.att.com/~bs/bs_faq2.html#pointers-and-references Et aussi, bien sûr, la section 8 de la FAQ de ce groupe.
-- Andre Heinen My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
Arnaud Meurgues
Andre Heinen wrote:
Si une fonction modifie son argument, certains programmeurs trouvent qu'il vaut mieux utiliser un pointeur parce que ça rend plus explicite le fait que la fonction peut modifier l'argument. Par exemple f(&i). D'autres programmeurs utilisent des références mais choisissent un nom de fonction explicite, par exemple modifier(i).
On utilise plutôt "const" pour signifier qu'on ne va pas modifier le paramètre :
f(const <type> &i)
-- Arnaud (Supprimez les geneurs pour me répondre)
Andre Heinen wrote:
Si une fonction modifie son argument, certains programmeurs
trouvent qu'il vaut mieux utiliser un pointeur parce que ça rend
plus explicite le fait que la fonction peut modifier l'argument.
Par exemple f(&i).
D'autres programmeurs utilisent des références mais choisissent
un nom de fonction explicite, par exemple modifier(i).
On utilise plutôt "const" pour signifier qu'on ne va pas modifier le
paramètre :
f(const <type> &i)
--
Arnaud
(Supprimez les geneurs pour me répondre)
Si une fonction modifie son argument, certains programmeurs trouvent qu'il vaut mieux utiliser un pointeur parce que ça rend plus explicite le fait que la fonction peut modifier l'argument. Par exemple f(&i). D'autres programmeurs utilisent des références mais choisissent un nom de fonction explicite, par exemple modifier(i).
On utilise plutôt "const" pour signifier qu'on ne va pas modifier le paramètre :
f(const <type> &i)
-- Arnaud (Supprimez les geneurs pour me répondre)
Richard Delorme
bonjour , je cherche a savoir quel est la différence entre une passage par référence et un passage par adresse.
Je sais ce qu'est un pointeur , mais c'est le pourquoi on a ajouté le passage par référence au c++ alors qu'il existé deja la passage par adresse.
y a til des choses que le passage par référence peut faire que le passage par adresse nepeut pas ?
Alléger l'écriture ?
-- Richard
bonjour , je cherche a savoir quel est la différence entre une passage par
référence et un passage par adresse.
Je sais ce qu'est un pointeur , mais c'est le pourquoi on a ajouté le
passage par référence au c++ alors qu'il existé deja la passage par adresse.
y a til des choses que le passage par référence peut faire que le passage
par adresse nepeut pas ?
bonjour , je cherche a savoir quel est la différence entre une passage par référence et un passage par adresse.
Je sais ce qu'est un pointeur , mais c'est le pourquoi on a ajouté le passage par référence au c++ alors qu'il existé deja la passage par adresse.
y a til des choses que le passage par référence peut faire que le passage par adresse nepeut pas ?
Alléger l'écriture ?
-- Richard
Gabriel Dos Reis
Pierre Maurette writes:
| C++ crée un type dérivé, la reference. C'est d'après moi une façon | d'introduire l'idée de passage (et retour) par variable en conservant | la définition originales des fonctions (une entourloupe ?).
?
-- Gaby
Pierre Maurette <maurettepierre@wanadoo.fr> writes:
| C++ crée un type dérivé, la reference. C'est d'après moi une façon
| d'introduire l'idée de passage (et retour) par variable en conservant
| la définition originales des fonctions (une entourloupe ?).
| C++ crée un type dérivé, la reference. C'est d'après moi une façon | d'introduire l'idée de passage (et retour) par variable en conservant | la définition originales des fonctions (une entourloupe ?).
?
-- Gaby
Gabriel Dos Reis
Andre Heinen writes:
| Il est garanti qu'une référence "pointe" toujours sur quelque | chose.
int& f() { int i = 0; return i; }
int main() { int& r = f(); return r; }
-- Gaby
Andre Heinen <nospam@nospam.invalid> writes:
| Il est garanti qu'une référence "pointe" toujours sur quelque
| chose.
C'est marrant, tu cites là la structure de boucle la moins utilisée, de très loin.
-- ;-)
kanze
Marc Boyer wrote in message news:<cnsi07$rhj$...
[...]
Une référence ne peut pas être nulle. Cela donne une information en plus pour le programmeur.
C'est vrai, mais je crois que la motivation initiale était de pouvoir passer des temporaires par référence, plutôt que par valeur. Surtout aux opérateurs : comment écrire quelque chose comme :
-- James Kanze GABI Software http://www.gabi-soft.fr Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> wrote in message
news:<cnsi07$rhj$1@news.cict.fr>...
[...]
Une référence ne peut pas être nulle. Cela donne une information en
plus pour le programmeur.
C'est vrai, mais je crois que la motivation initiale était de pouvoir
passer des temporaires par référence, plutôt que par valeur. Surtout aux
opérateurs : comment écrire quelque chose comme :
Une référence ne peut pas être nulle. Cela donne une information en plus pour le programmeur.
C'est vrai, mais je crois que la motivation initiale était de pouvoir passer des temporaires par référence, plutôt que par valeur. Surtout aux opérateurs : comment écrire quelque chose comme :