Як кинути / перетворити покажчик на посилання на C ++


143

Як я можу передати покажчик ( Object *ob) на функцію, яка є прототипом void foo(Object &)?


У заголовку написано "cast [sic] посилання на покажчик", але питання починається з вказівника і потребує посилання. У якому напрямку це?
MSalters

@MSalters це слід перетворити . Я це редагую. Але я шукав будь-яке рішення, яке я отримаю, тому згадав про роль
Dewsworld

Відповіді:


209

Назвіть це так:

foo(*ob);

Зауважте, що тут не відбувається кастинг, як це запропоновано в назві вашого запитання. Все, що ми зробили, - це перенаправлення вказівника на об'єкт, який ми потім передаємо у функцію.


25
@Ricobob Саме так трапляється на SO так часто. Відповіді на прості питання, які легко зрозуміти, часто набирають багато голосів. На довгі і складні відповіді на складні запитання часто отримують декілька відгуків, оскільки виборці не можуть легко оцінити заслуги. Що стосується реп, я нічого не маю на цьому через реп. ;-) Але я від душі згоден. Я хочу, щоб складні відповіді отримали більше представників.
Девід Геффернан

@DavidHeffernan Так, це, здається, є проблемою - я думаю, що це проблема, яку потрібно перенести до MetaSO - якщо хтось ще не підняв її.
Ricibob

4
Чи створює це копію obабо просто перетворює (якщо не передається) покажчик на посилання? Що робити, якщо obбуло nullptr?
Дрю Ноакс

5
@Drew Це просто відміняє вказівник. Немає копії. Конверсії немає. Без акторського складу. Потім об'єкт передається посиланням на функцію. Це помилка, якщо точка є нульовою.
Девід Геффернан


41
foo(*ob);

Вам не потрібно робити це, тому що це той самий тип об'єкта, просто потрібно його знеструмлювати.


здогадуючись, amd додає багато ..., це звичайно не формат хорошої відповіді тут (навіть якщо це правильно в цьому випадку), тому, ймовірно, ви отримали один зворотний результат.
KillianDS

5
bhhaaa, я додав "я здогадуюсь", оскільки це змусило мене написати щонайменше 30 символів. це теж спосіб додати "..........."
Roee Gavirel

10
@RoeeGavirel Я твій перший виборець, тому що я відчув суворість суворої. FWIW ви можете перевищити ліміт 30 знаків, але додавши коментар HTML <! -----------------------------> що я робив у моя перша версія відповіді! Моя редакція вашої відповіді показує, як.
Девід Геффернан

Відповіді, що стосуються лише коду, без жодних пояснень.
Кіт М

1
@KeithM - Це випадковий коментар і -1. Відповідь була дана близько 6 років тому, також питання не запитувало "чому", а лише запитувало "як". Але обов'язково додам пояснення.
Roee Gavirel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.