c++ - dynamic_cast 在内部是如何工作的?

标签 c++ rtti dynamic-cast

<分区>

谁能给我解释一下 dynamic_cast 的内部工作原理? Virtual Pointer 在其中的作用是什么?

最佳答案

形式上,当然,它是实现定义的,但在 实践中,vtable中会有一个额外的指针, 它指向对象的描述,可能是 DAG 包含指向各种 child 的指针的对象 (派生类)和有关它们类型的信息(a 指向 type_info 的指针,也许)。

然后编译器生成走不同路径的代码 在图表中,直到它找到目标类型,或者 访问了所有的节点。如果找到目标类型,则 节点还将包含有关如何执行的必要信息 转换指针。

编辑:

我想到了另外一点。即使生成的代码 找到匹配项,它可能必须继续导航才能 确保它没有歧义。

关于c++ - dynamic_cast 在内部是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20798214/

相关文章:

c++ - 使用指南在函数签名中推导模板参数

C++ 字符串解析到 Delphi

delphi - RTTI TRttiMethod.Invoke、stdcall 和 const 参数的错误

Delphi - 无法将 TVirtualInterface 转换为虚拟化接口(interface)的基接口(interface)

c++ - dynamic_cast 没有按预期抛出异常

c++ - Qt - 没有滚动条的 QGraphicsView

c++ - 为什么我们不能在构造函数初始化列表中初始化静态变量,但我们可以在构造函数体中

Delphi SysUtils.Supports 意外返回 true

c++检查基引用的大多数派生类是否具有另一个基

c++ - 在 static_cast 和dynamic_cast 之间自动选择以获得最佳性能