dynamic_cast如何在内部工作?

him*_*ims 3 c++ rtti

有人可以解释一下dynamic_cast内部是如何工作的吗?虚拟指针的作用是什么?

Jam*_*nze 9

当然,正式地定义了它的实现,但实际上,vtable中会有一个额外的指针,指向对象的描述,可能是包含指向各种子节点(派生类)的对象的DAG.有关其类型的信息(type_info可能指向a的指针).

然后,编译器生成代码,该代码遍历图中的不同路径,直到找到目标类型或访问了所有节点.如果找到目标类型,该节点还将包含有关如何转换指针的必要信息.

编辑:

还有一点是我的意思.即使生成的代码找到匹配项,它也可能必须继续导航以确保它不是模糊的.