首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态强制转换在不强制转换为派生最多的

动态强制转换在不强制转换为派生最多的
EN

Stack Overflow用户
提问于 2020-11-22 02:10:33
回答 1查看 45关注 0票数 0

让我们来看一下下面的案例

代码语言:javascript
复制
struct A{
  virtual ~A(){}
};
struct B : public A{
  virtual ~B(){}
};
struct C : public B{
  virtual ~C(){}
};
int main(){
  A* a = new C();
  B* b = dynamic_cast<B*>(a);
}

dynamic_cast如何知道B在运行时是C的超类。我知道dynamic_cast访问*a的type_info,并通过检查name属性发现*a实际上是C类型。但是,如果没有编译器拥有的关于类继承的所有信息,dynamic_cast如何知道B是C的超类,只包含*a的类型是C的信息?这有什么意义吗?

EN

回答 1

Stack Overflow用户

发布于 2020-11-22 02:30:52

前提是错误的:dynamic_cast确实拥有它需要的所有信息。编译器在执行时将类型信息编码在只读类型信息记录中,这些记录是二进制文件的一部分。嵌入在每个多态对象中的vtable指针允许dynamic_cast找到这种“烘焙的”类型信息,因为虚方法表包含的信息不仅仅是方法指针。这是它的常见实现方式,也是x86-64上固定ABI的问题,即该体系结构的所有编译器都使用相同的iirc对此信息进行编码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64946442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档