Como converter / converter ponteiro para referência em C ++

143

Como posso passar um ponteiro ( Object *ob) para uma função cujo protótipo é void foo(Object &)?

Dewsworld
fonte
O título diz "faça referência ao ponteiro", mas a pergunta começa com um ponteiro e precisa de uma referência. Que direção é essa?
MSalters
@MSalters deve ser convertido . Estou editando. Mas eu estava à procura de qualquer solução que eu tenho, então eu mencionei elenco
Dewsworld

Respostas:

210

Chame assim:

foo(*ob);

Observe que não há transmissão aqui, como sugerido no título da sua pergunta. Tudo o que fizemos foi de-referenciado o ponteiro para o objeto que passamos para a função.

David Heffernan
fonte
25
@ Ricobob É o que acontece com o SO com tanta frequência. As respostas a perguntas simples que podem ser facilmente entendidas costumam receber muitos votos positivos. Respostas longas e complexas para perguntas complicadas costumam receber poucos votos positivos, porque os eleitores não podem julgar facilmente o mérito. Quanto ao representante, eu não entendi nada por causa do representante. ;-) Mas eu concordo plenamente. Desejo respostas complexas reunidas mais representantes.
David Heffernan
@DavidHeffernan Sim, este parece ser o problema - acho que é um problema para o MetaSO - se alguém ainda não o levantou lá.
Ricibob
4
Isso cria uma cópia obou apenas converte (se não for convertido) o ponteiro em uma referência? E se obfosse nullptr?
de Drew Noakes
5
@ Drew Ele simplesmente desreferencia o ponteiro. Nenhuma cópia. Sem conversão. Sem elenco. O objeto é então passado por referência à função. É um erro se o ponto for nulo.
David Heffernan
1
@DrewNoakes stackoverflow.com/questions/2727834/…
David Heffernan
41
foo(*ob);

Você não precisa convertê-lo porque é o mesmo tipo de objeto, basta desreferenciá-lo.

Roee Gavirel
fonte
adivinhar amd adicionando muitas ... geralmente não é o formato de uma boa resposta aqui (mesmo que esteja correta neste caso), provavelmente é por isso que você recebeu um voto negativo.
KillianDS
5
bhhaaa, eu adicionei o "eu acho" porque me fez escrever pelo menos 30 caracteres. que também é maneira que eu adicionar o "..........."
Roee Gavirel
10
@RoeeGavirel Eu sou seu primeiro eleitor, porque senti que o voto negativo era duro. FWIW, você pode ultrapassar o limite de 30 caracteres, mas adicionando um comentário HTML <! -----------------------------> que eu fiz em minha primeira versão da resposta! Minha edição na sua resposta mostra como.
David Heffernan
Respostas apenas de código, sem explicação, são desaprovadas atualmente.
Keith M
1
@ KeithM - Esse é um comentário aleatório e -1. A resposta foi dada há cerca de 6 anos, também a pergunta não pediu o "porquê", apenas o "como". Mas com certeza, vou adicionar uma explicação.
Roee Gavirel