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 &)?


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.


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


41
foo(*ob);

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.