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

3 minutos de lectura

avatar de usuario
mundo de rocío

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

  • El título dice “cast [sic] referencia al puntero”, pero la pregunta comienza con un puntero y necesita una referencia. ¿Qué dirección es?

    – MSalters

    16 de abril de 2012 a las 10:56


  • @MSalters debería ser convertir. lo estoy editando Pero estaba buscando cualquier solución que obtuviera, así que mencioné emitir

    – Mundo de rocío

    16/04/2012 a las 11:00

Llámalo así:

foo(*ob);

Tenga en cuenta que no se está realizando ningún casting aquí, 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.

  • @Ricobob Eso es lo que sucede en SO muy a menudo. Las respuestas a preguntas simples que se pueden entender fácilmente a menudo obtienen muchos votos a favor. Las respuestas largas y complejas a preguntas engañosas a menudo obtienen pocos votos a favor porque los votantes no pueden juzgar fácilmente el mérito. En cuanto a la repetición, no obtuve nada debido al límite de repetición. 😉 Pero estoy totalmente de acuerdo. Desearía que las respuestas complejas obtuvieran más representantes.

    –David Heffernan

    16/04/2012 a las 21:42


  • ¿Esto crea una copia de ob, o simplemente convertir (si no se convierte) el puntero en una referencia? Y si ob estaba nullptr?

    – Drew Noakes

    15 de junio de 2014 a las 23:15

  • @Drew Simplemente elimina la referencia del puntero. Sin copia. Sin conversión. Sin elenco A continuación, el objeto se pasa por referencia a la función. Es un error si el punto es nulo.

    –David Heffernan

    16 de junio de 2014 a las 6:33

  • @DrewNoakes stackoverflow.com/questions/2727834/…

    –David Heffernan

    16 de junio de 2014 a las 10:31

  • Solo una nota : si desea tener la referencia sin pasar a la función, úsela así: Object& objref = *ob;

    usuario13119880

    6 oct 2020 a las 21:36


avatar de usuario
Roee Gavirel

foo(*ob);

No necesita emitirlo porque es el mismo tipo de objeto, solo necesita quitarle la referencia.

  • adivinar y agregar muchos … no suele ser el formato de una buena respuesta aquí (aunque es correcto en este caso), probablemente por eso obtuviste un voto negativo.

    – KillianDS

    16 de abril de 2012 a las 11:20


  • bhhaaa, agregué el “Supongo” porque me hizo escribir al menos 30 caracteres. esa es también la forma en que agrego el “………..”

    – Roee Gavirel

    16 de abril de 2012 a las 11:41

  • @RoeeGavirel Soy tu primer votante positivo porque sentí que el voto negativo fue 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

    16 de abril de 2012 a las 12:04


  • Las respuestas de solo código, sin explicación, están mal vistas en estos días.

    – Keith M.

    4 de diciembre de 2018 a las 19:44

  • @KeithM – Ese es un comentario aleatorio y -1. La respuesta se dio hace unos 6 años, además, la pregunta no preguntaba el “por qué”, solo preguntaba el “cómo”. Pero claro, añadiré una explicación.

    – Roee Gavirel

    5 de diciembre de 2018 a las 7:09

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad