&(*similarObject)和similarObject之间的区别?他们不一样吗?

poc*_*oco 29 c++ casting dynamic

有人可以向我解释一下

dynamic_cast<SomeObject *>( &(*similarObject) );
Run Code Online (Sandbox Code Playgroud)

做取消引用指针的地址有什么意义?指针本身不是它的地址吗?

Naw*_*waz 32

可能是类型similarObject已经过载operator*,因此它会返回您传递给它的地址dynamic_cast.

&(*x)并且x 可能并不总是相同的事情.例如,想一下迭代器:

std::map<int, int>::iterator it = v.begin();
Run Code Online (Sandbox Code Playgroud)

然后,it&(*it)是两个不同的东西:

  • 类型itstd::map<int, int>::iterator
  • 类型&(*it)std::pair<int,int>*

他们并非完全相同.您的代码片段也可能发生类似的事情.


Dan*_*Dan 17

如果similarObject是智能指针,则当*已经过载时,此技术有时用于获取原始指针的引用.

  • `auto_ptr`和Boost和tr1智能指针都有一个函数,`.get()` (2认同)