Jak rzutować / konwertować wskaźnik na odwołanie w C ++

143

Jak mogę przekazać wskaźnik ( Object *ob) do funkcji, którą jest prototyp void foo(Object &)?

Dewsworld
źródło
Tytuł mówi „rzut [sic] odniesienie do wskaźnika”, ale pytanie zaczyna się od wskaźnika i wymaga odniesienia. Który to kierunek?
MSalters
@MSalters należy przekonwertować . Edytuję to. Ale szukałem dowolnego rozwiązania, które dostałem, więc wspomniałem o obsadzie
Dewsworld

Odpowiedzi:

209

Nazwij to tak:

foo(*ob);

Zwróć uwagę, że nie odbywa się tutaj casting, jak sugeruje tytuł twojego pytania. Wszystko, co zrobiliśmy, to usunięcie wskaźnika do obiektu, który następnie przekazujemy do funkcji.

David Heffernan
źródło
25
@Ricobob Tak często dzieje się w SO. Odpowiedzi na proste pytania, które można łatwo zrozumieć, często gromadzą mnóstwo głosów. Długie i złożone odpowiedzi na trudne pytania często otrzymują niewiele głosów za, ponieważ wyborcy nie mogą łatwo ocenić zasług. Jeśli chodzi o rep, nie mam nic na ten temat z powodu limitu powtórzeń. ;-) Ale ja serdecznie się zgadzam. Chciałbym, żeby złożone odpowiedzi uzyskały więcej opinii.
David Heffernan
@DavidHeffernan Tak, to wydaje się być problemem - myślę, że jest to problem do wniesienia do MetaSO - jeśli ktoś jeszcze go tam nie zgłosił.
Ricibob
4
Czy to tworzy kopię ob, czy po prostu konwertuje (jeśli nie rzutuje) wskaźnik na odniesienie? A co by obbyło nullptr?
Drew Noakes
5
@Drew Po prostu wyłuskuje wskaźnik. Brak kopii. Brak konwersji. Bez obsady. Obiekt jest następnie przekazywany przez odniesienie do funkcji. Jeśli punkt jest pusty, jest to błąd.
David Heffernan,
1
@DrewNoakes stackoverflow.com/questions/2727834/…
David Heffernan
41
foo(*ob);

Nie musisz go rzucać, ponieważ jest to ten sam typ obiektu, wystarczy go usunąć.

Roee Gavirel
źródło
zgadywanie i dodawanie wielu ... zwykle nie jest tutaj formatem dobrej odpowiedzi (chociaż w tym przypadku jest poprawna), prawdopodobnie dlatego dostałeś jeden głos przeciw.
KillianDS,
5
bhhaaa, dodałem „chyba”, ponieważ zmusiło mnie to do napisania co najmniej 30 znaków. w ten sposób dodaję „...........”
Roee Gavirel
10
@RoeeGavirel Jestem twoim pierwszym pozytywnym głosicielem, ponieważ uznałem, że głos negatywny jest ostry. FWIW możesz przekroczyć limit 30 znaków, ale dodając komentarz HTML <! -----------------------------> co zrobiłem moja pierwsza wersja odpowiedzi! Moja zmiana Twojej odpowiedzi pokazuje, jak to zrobić.
David Heffernan,
W dzisiejszych czasach odpowiedzi składające się tylko z kodu, bez wyjaśnienia, nie są obecnie mile widziane.
Keith M
1
@KeithM - to przypadkowy komentarz i -1. Odpowiedź została udzielona około 6 lat temu, również pytanie nie pytało „dlaczego”, tylko pytało „jak”. Ale jasne, dodam wyjaśnienie.
Roee Gavirel,