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


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.


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,


41
foo(*ob);

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


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.