Cómo convertir / convertir el puntero a referencia en C ++

143

¿Cómo puedo pasar un puntero ( Object *ob) a una función que es el prototipo void foo(Object &)?

Dewsworld
fuente
El título dice "emitir [sic] referencia al puntero" pero la pregunta comienza con un puntero y necesita una referencia. ¿En qué dirección es?
MSalters
@MSalters debería convertirse . Lo estoy editando Pero estaba buscando cualquier solución que obtuviera, así que mencioné el elenco
Dewsworld

Respuestas:

210

Llámalo así:

foo(*ob);

Tenga en cuenta que aquí no se realiza ningún casting, como se sugiere en el título de su pregunta. Todo lo que hemos hecho es desreferenciar el puntero al objeto que luego pasamos a la función.

David Heffernan
fuente
25
@Ricobob Eso es lo que sucede en SO tan a menudo. Las respuestas a preguntas simples que se pueden entender fácilmente a menudo obtienen muchos votos positivos. Las respuestas largas y complejas a preguntas difíciles a menudo obtienen pocos votos positivos porque los votantes no pueden juzgar fácilmente el mérito. En cuanto al representante, no obtuve nada sobre esto debido al límite de representantes. ;-) Pero estoy sinceramente de acuerdo. Deseo que respuestas complejas obtengan más rep.
David Heffernan
@DavidHeffernan Sí, este parece ser el problema, supongo que es un problema llevar a MetaSO, si alguien no lo ha planteado allí.
Ricibob
44
¿Esto crea una copia obo simplemente convierte (si no se convierte) el puntero en una referencia? ¿Y si obfue nullptr?
Drew Noakes
55
@Drew Simplemente desreferencia el puntero. Sin copia Sin conversión Sin yeso El objeto luego se pasa por referencia a la función. Es un error si el punto es nulo.
David Heffernan
1
@DrewNoakes stackoverflow.com/questions/2727834/…
David Heffernan
41
foo(*ob);

No necesita lanzarlo porque es el mismo tipo de Objeto, solo necesita desreferenciarlo.

Roee Gavirel
fuente
adivinar y agregar muchos ... generalmente no es el formato de una buena respuesta aquí (aunque es correcta en este caso), probablemente es por eso que obtuviste un voto negativo.
KillianDS
55
bhhaaa, agregué el "Supongo" porque me hizo escribir al menos 30 caracteres. también agrego el "..........."
Roee Gavirel
10
@RoeeGavirel Soy tu primer votante porque sentí que el voto negativo era duro. FWIW puede superar el límite de 30 caracteres pero agregando un comentario HTML <! -----------------------------> que hice en ¡Mi primera versión de la respuesta! Mi edición de su respuesta muestra cómo.
David Heffernan
Las respuestas de solo código, sin explicación, están mal vistas en estos días.
Keith M
1
@KeithM: es un comentario aleatorio y -1. La respuesta se dio hace unos 6 años, y la pregunta no preguntaba por qué, solo preguntaba por qué. Pero claro, agregaré una explicación.
Roee Gavirel