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

时间:2011-08-05 15:09:36

标签: c++ dynamic casting

有人可以向我解释一下

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

执行解除引用指针的地址有什么意义?指针本身不是它的地址吗?

3 个答案:

答案 0 :(得分:32)

可能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>*

他们。您的代码片段也可能发生类似的事情。

答案 1 :(得分:17)

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

答案 2 :(得分:1)

没有人提到similarObject是左值,而&*similarObject是左值。