Comment convertir / convertir un pointeur en référence en C ++

143

Comment puis-je passer un pointeur ( Object *ob) vers une fonction qui est le prototype void foo(Object &)?

Dewsworld
la source
Le titre dit "cast [sic] reference to pointer" mais la question commence par un pointeur et a besoin d'une référence. Quelle direction est-ce?
MSalters
@MSalters il devrait être converti . Je le modifie. Mais je cherchais la solution que j'obtiens, alors j'ai mentionné le casting
Dewsworld

Réponses:

210

Appelez ça comme ça:

foo(*ob);

Notez qu'il n'y a pas de diffusion en cours ici, comme suggéré dans le titre de votre question. Tout ce que nous avons fait est de dé-référencer le pointeur vers l'objet que nous passons ensuite à la fonction.

David Heffernan
la source
25
@Ricobob C'est ce qui arrive si souvent sur SO. Les réponses à des questions simples qui peuvent être facilement comprises recueillent souvent beaucoup de votes. Les réponses longues et complexes à des questions délicates reçoivent souvent peu de votes positifs car les électeurs ne peuvent pas facilement juger du mérite. Quant au représentant, je n'ai rien eu à ce sujet à cause du plafond de représentant. ;-) Mais je suis tout à fait d'accord. Je souhaite que les réponses complexes recueillent plus de représentants.
David Heffernan
@DavidHeffernan Oui, cela semble être le problème - je suppose que c'est un problème à porter à MetaSO - si quelqu'un ne l'a pas déjà soulevé là-bas.
Ricibob
4
Cela crée-t-il une copie obou convertit-il simplement (s'il n'est pas converti) le pointeur en référence? Et si obc'était nullptr?
Drew Noakes
5
@Drew It déréférence simplement le pointeur. Pas de copie. Pas de conversion. Pas de casting. L'objet est ensuite passé par référence à la fonction. C'est une erreur si le point est nul.
David Heffernan
1
@DrewNoakes stackoverflow.com/questions/2727834/…
David Heffernan
41
foo(*ob);

Vous n'avez pas besoin de le convertir car il s'agit du même type d'objet, il vous suffit de le déréférencer.

Roee Gavirel
la source
deviner et ajouter beaucoup de ... n'est généralement pas le format d'une bonne réponse ici (même si c'est correct dans ce cas), c'est probablement pourquoi vous avez obtenu un vote défavorable.
KillianDS
5
bhhaaa, j'ai ajouté le "je suppose" parce que ça m'a fait écrire au moins 30 caractères. c'est aussi la façon dont j'ajoute le "..........."
Roee Gavirel
10
@RoeeGavirel Je suis votre premier vote positif parce que j'ai senti que le vote négatif était sévère. FWIW vous pouvez dépasser la limite de 30 caractères mais en ajoutant un commentaire HTML <! -----------------------------> ce que j'ai fait dans ma première version de la réponse! Ma modification de votre réponse montre comment.
David Heffernan
Les réponses basées uniquement sur le code, sans aucune explication, sont mal vues de nos jours.
Keith M
1
@KeithM - C'est un commentaire aléatoire et -1. La réponse a été donnée il y a environ 6 ans, aussi la question ne demandait pas le «pourquoi», elle ne demandait que le «comment». Mais bien sûr, je vais ajouter une explication.
Roee Gavirel