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

143

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

Dewsworld
источник
В заголовке написано «cast [sic] ссылка на указатель», но вопрос начинается с указателя и нуждается в ссылке. Какое это направление?
MSalters
@MSalters это должно быть конвертировано . Я редактирую это. Но я искал любое решение, которое получу, поэтому упомянул актерский состав
Dewsworld

Ответы:

210

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

foo(*ob);

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

Дэвид Хеффернан
источник
25
@Ricobob Вот так часто и происходит на SO. Ответы на простые вопросы, которые легко понять, часто набирают много голосов. Длинные и сложные ответы на сложные вопросы часто получают мало голосов, потому что избиратели не могут легко оценить их достоинства. Что касается представителя, я ничего не получил по этому поводу из-за шапки представителя. ;-) Но я от всей души согласен. Я бы хотел, чтобы сложные ответы набирали больше представителей.
Дэвид Хеффернан
@DavidHeffernan Да, похоже, это проблема - я думаю, это проблема, которую стоит принять в MetaSO - если кто-то еще не поднял ее там.
Ricibob
4
Создает ли это копию obили просто конвертирует (если не приводит) указатель на ссылку? Что если бы obбыло nullptr?
Дрю Ноакс
5
@Drew Это просто разыменовывает указатель. Нет копии Нет конверсии. Нет актеров. Затем объект передается по ссылке на функцию. Это ошибка, если точка нулевая.
Дэвид Хеффернан
1
@DrewNoakes stackoverflow.com/questions/2727834/…
Дэвид Хеффернан
41
foo(*ob);

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

Роу Гавирел
источник
угадывание и добавление большого количества ... это обычно не формат хорошего ответа здесь (хотя это и правильно в данном случае), поэтому, вероятно, поэтому вы получили один отрицательный ответ.
KillianDS
5
Бххааа, я добавил «я думаю», потому что это заставило меня написать как минимум 30 символов. это также способ, которым я добавляю "..........."
Роуи Гавирел
10
@ RoeeGavirel Я твой первый голосующий, потому что я чувствовал, что голосование было резким. FWIW вы можете преодолеть ограничение в 30 символов, но добавив комментарий HTML <! -----------------------------> который я сделал в моя первая версия ответа! Мое редактирование вашего ответа показывает как.
Дэвид Хеффернан
Ответы только на код, без объяснения, не одобряются в эти дни.
Кит М
1
@KeithM - это случайный комментарий и -1. Ответ был дан около 6 лет назад, также вопрос не спрашивал «почему», он только спрашивал «как». Но конечно, я добавлю объяснение.
Роу Гавирел