Как привести / преобразовать указатель на ссылку в C ++


143

Как я могу передать указатель ( Object *ob) на функцию, которая является прототипом void foo(Object &)?


В заголовке написано «cast [sic] ссылка на указатель», но вопрос начинается с указателя и нуждается в ссылке. Какое это направление?
MSalters

@MSalters это должно быть конвертировано . Я редактирую это. Но я искал любое решение, которое получу, поэтому упомянул актерский состав
Dewsworld

Ответы:


210

Назовите это так:

foo(*ob);

Обратите внимание, что здесь не происходит кастинг, как указано в заголовке вашего вопроса. Все, что мы сделали, - сняли ссылку на указатель на объект, который мы затем передали функции.


25
@Ricobob Вот так часто и происходит на SO. Ответы на простые вопросы, которые легко понять, часто набирают много голосов. Длинные и сложные ответы на сложные вопросы часто получают мало голосов, потому что избиратели не могут легко оценить их достоинства. Что касается представителя, я ничего не получил по этому поводу из-за шапки представителя. ;-) Но я от всей души согласен. Я бы хотел, чтобы сложные ответы набирали больше представителей.
Дэвид Хеффернан

@DavidHeffernan Да, похоже, это проблема - я думаю, это проблема, которую стоит принять в MetaSO - если кто-то еще не поднял ее там.
Ricibob

4
Создает ли это копию obили просто конвертирует (если не приводит) указатель на ссылку? Что если бы obбыло nullptr?
Дрю Ноакс

5
@Drew Это просто разыменовывает указатель. Нет копии Нет конверсии. Нет актеров. Затем объект передается по ссылке на функцию. Это ошибка, если точка нулевая.
Дэвид Хеффернан


41
foo(*ob);

Вам не нужно приводить его, потому что это тот же тип объекта, вам просто нужно разыменовать его.


угадывание и добавление большого количества ... это обычно не формат хорошего ответа здесь (хотя это и правильно в данном случае), поэтому, вероятно, поэтому вы получили один отрицательный ответ.
KillianDS

5
Бххааа, я добавил «я думаю», потому что это заставило меня написать как минимум 30 символов. это также способ, которым я добавляю "..........."
Роуи Гавирел

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

Ответы только на код, без объяснения, не одобряются в эти дни.
Кит М

1
@KeithM - это случайный комментарий и -1. Ответ был дан около 6 лет назад, также вопрос не спрашивал «почему», он только спрашивал «как». Но конечно, я добавлю объяснение.
Роу Гавирел
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.