Разница между & (* похожим объектом) и подобным объектом? Разве они не одинаковы? - PullRequest
29 голосов
/ 05 августа 2011

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

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

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

Ответы [ 3 ]

32 голосов
/ 05 августа 2011

Может случиться так, что тип 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>*

Они не вообще одинаковы. Аналогичная вещь может произойти и с вашим фрагментом кода.

17 голосов
/ 05 августа 2011

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

1 голос
/ 06 августа 2011

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

...