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.