Come eseguire il cast / convertire il puntatore a riferimento in C ++


143

Come posso passare un puntatore ( Object *ob) a una funzione di quale prototipo è void foo(Object &)?


Il titolo dice "cast [sic] riferimento al puntatore" ma la domanda inizia con un puntatore e necessita di un riferimento. Che direzione è?
Salterio

@MSalters dovrebbe essere convertito . Lo sto modificando. Ma stavo cercando qualsiasi soluzione ottenga, quindi ho parlato del cast
Dewsworld,

Risposte:


210

Chiamalo così:

foo(*ob);

Si noti che non è in corso alcun casting, come suggerito nel titolo della domanda. Tutto ciò che abbiamo fatto è de-referenziato il puntatore all'oggetto che poi passiamo alla funzione.


25
@Ricobob Ecco cosa succede molto spesso su SO. Le risposte a domande semplici che possono essere facilmente comprese spesso raccolgono molti voti positivi. Le risposte lunghe e complesse a domande difficili spesso ottengono pochi voti perché gli elettori non possono giudicare facilmente il merito. Per quanto riguarda il rappresentante, non ho avuto nulla su questo a causa del limite di reputazione. ;-) Ma sono pienamente d'accordo. Vorrei risposte complesse ottenute più rappresentante.
David Heffernan,

@DavidHeffernan Sì, questo sembra essere il problema - suppongo che sia un problema da portare a MetaSO - se qualcuno non lo ha già sollevato lì.
Ricibob,

4
Questo crea una copia obo converte (se non trasmette) il puntatore in un riferimento? E se obfosse nullptr?
Drew Noakes,

5
@Drew Dereferenzia semplicemente il puntatore. Nessuna copia. Nessuna conversione. Nessun cast. L'oggetto viene quindi passato in riferimento alla funzione. È un errore se il punto è null.
David Heffernan,


41
foo(*ob);

Non è necessario lanciarlo perché è lo stesso tipo di oggetto, devi solo dereferenziarlo.


indovinare e aggiungere un sacco di ... di solito non è il formato di una buona risposta qui (anche se in questo caso è corretto), probabilmente è per questo che hai ottenuto un voto negativo.
KillianDS

5
bhhaaa, ho aggiunto "Immagino" perché mi ha fatto scrivere almeno 30 caratteri. è anche così che aggiungo "..........."
Roee Gavirel,

10
@RoeeGavirel Sono il tuo primo votante perché ho ritenuto duro il voto negativo. FWIW puoi superare il limite di 30 caratteri ma aggiungendo un commento HTML <! -----------------------------> che ho fatto in la mia prima versione della risposta! La mia modifica alla tua risposta mostra come.
David Heffernan,

Al giorno d'oggi le risposte solo al codice, senza alcuna spiegazione, sono disapprovate.
Keith M

1
@KeithM - Questo è un commento casuale e -1. La risposta è stata data circa 6 anni fa, inoltre la domanda non chiedeva il "perché", ma solo il "come". Ma sicuro, aggiungerò una spiegazione.
Roee Gavirel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.