Подтвердить что ты не робот

Разница между & (* SimilarObject) и аналогичным объектом? Разве они не такие?

Может кто-нибудь объяснить это мне?

dynamic_cast<SomeObject *>( &(*similarObject) );

Какой смысл делать адрес разыменованного указателя? Не мог бы сам указатель быть его адресом?

4b9b3361

Ответ 1

Может быть, тип similarObject перегружен operator*, и поэтому он возвращает то, чей адрес вы переходите на dynamic_cast.

&(*x) и x могут быть не всегда одинаковыми. Например, подумайте об итераторе:

std::map<int, int>::iterator it = v.begin();

Тогда it и &(*it) - две разные вещи:

  • Тип it - std::map<int, int>::iterator
  • Тип &(*it) - std::pair<int,int>*

Они совсем не такие. Подобное может случиться и с вашим фрагментом кода.

Ответ 2

Если подобный Object является умным указателем, этот метод иногда используется для получения ссылки на необработанный указатель, когда * был перегружен.

Ответ 3

Никто еще не сказал, что similarObject является lvalue, тогда как &*similarObject является r-значением.