有人可以向我解释一下
dynamic_cast<SomeObject *>( &(*similarObject) );
执行解除引用指针的地址有什么意义?指针本身不是它的地址吗?
答案 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
是左值。