C++ vtable 通过虚拟继承进行解析

2024-01-06

我对 C++ 和虚拟继承很好奇,特别是解决低音类和子类之间 vtable 冲突的方式。我不会假装了解它们如何工作的具体细节,但到目前为止我所看到的是,由于该分辨率,使用虚拟函数会导致一些小的延迟。我的问题是基类是否为空 - 即它的虚拟函数定义为:

virtual void doStuff() = 0;

这是否意味着该解析是不必要的,因为只有一组函数可供选择?

如果这是一个愚蠢的问题,请原谅我 - 正如我所说,我不明白 vtable 是如何工作的,所以我真的不知道更好。

EDIT

因此,如果我有一个带有两个独立子类的抽象类:

    A
   / \
  /   \
 B     C

与仅单个继承自由类相比,从子类调用函数时不会对性能造成影响?


打电话没有命中非虚拟的子类中的函数。如果您像示例中那样调用纯虚函数的重写版本,则虚拟惩罚可能仍然存在。一般来说,编译器很难优化虚拟表的使用,除非在非常特殊的情况下,它知道所讨论对象的确切按值类型(从上下文)。

但说实话,不用担心开销。它会非常少,以至于在实践中您几乎肯定不会遇到它是导致性能瓶颈的代码部分的情况。在对您的设计有意义的地方使用虚拟函数,并且不用担心(微小的)性能损失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ vtable 通过虚拟继承进行解析 的相关文章

随机推荐

  • 为什么 html 标签(s、strong)在 jasper 报告中不起作用?

    我添加了静态文本 html 标签 但单击预览后粗体和删除线无法正确显示 此外 当从数据库加载数据时 它无法正确显示 有什么解决办法吗 Jasper Report不支持所有html标签 支持的标签定义在样式文本示例 http jasperre
  • 导出的 pdf 中缺少 Jupyter 笔记本 matplotlib 数字

    在 jupyter 笔记本中生成 pdf 时 一切都很好 但我想将内联数字保留在 pdf 以及笔记本中 这是我的代码 matplotlib notebook import matplotlib pyplot as plt import nu
  • Xcode 7.3 - 警告未显示且无法搜索项目

    自从我升级到 Xcode 7 3 以来 我注意到在搜索工作区时总是 没有结果 并且警告窗格中也没有显示任何警告 有时它会工作几分钟然后再次死机 重新启动我的电脑 Xcode 然后重新安装都没有帮助 还有其他人遇到过这种情况或找到解决方案 解
  • 错误:预期声明说明符或“list_node”之前的“...”

    我有一个 Catalog h 文件 typedef struct node list node struct node operationdesc op ptr list node next 和一个 parser h 与此 include
  • 为什么我需要 DJANGO_SETTINGS_MODULE 设置?

    每次通过 SSH 登录服务器时 我都需要输入以下内容 export DJANGO SETTINGS MODULE settings 如果我不使用manage py模块就会失败 我的manage py添加了以下代码 if notificati
  • 在数据库上创建程序集时部署 SQL CLR 项目失败

    我用来创建程序集的服务器上的文件夹中有一个包含 3 个 dll 文件的文件夹 我首先尝试了以下代码 并收到一个错误 表示在服务器上找不到 system data datasetextensions dll 文件 我将 dll 从我的计算机复
  • 如何共享对 Firebase Analytics 数据的访问而不暴露 Firebase 的其余部分?

    我知道如何向 Firebase 项目添加协作者 并且可以为每个协作者分配特定的角色 这些角色与某些权限相关联 然而 似乎没有一个角色符合我的要求 我想与非技术营销人员共享 Firebase Analytics 的访问权限 我必须避免将 Fi
  • IIS - 以编程方式重置 SSL 会话

    我有一个 IIS 7 5 Web 应用程序 客户端使用双向 又称双向 SSL 连接到该应用程序 客户端证书由智能卡提供 我需要让网络应用程序超时 当超时发生时 我想销毁 SSL 会话 假设在 IIS 上 从而强制客户端重新进行身份验证 如何
  • 原型点击、鼠标悬停和鼠标移开不能一起工作?

    我正在尝试做一个非常简单的按钮 它根据鼠标悬停 鼠标移出和改变颜色 单击 我正在原型中执行此操作 奇怪的是如果我使用鼠标悬停和鼠标移出 单击按钮后 按钮不会变为白色 似乎是因为鼠标移开 这是我的代码 izzy observe mouseov
  • 可以发出 cURL 请求并获取所采用的路由(类似于traceroute)

    我有一个带有标头参数的 GET 请求 我想检查我的应用程序正在使用哪个数据库实例 有没有办法构建一个 cURL 请求来告诉我我的请求要去哪里 我知道有一个traceroute显示所有服务器跃点的命令 但是有没有类似于使用 cURL 的东西呢
  • 垂直于给定点的线段

    我想计算给定线上与给定点垂直的点 我有一条线段AB 在线段外有一个点C 我想计算AB上的点D 使得CD垂直于AB 我必须找到D点 它非常类似于this https stackoverflow com questions 1811549 pe
  • 从 XIB 到故事板

    我有一个带有故事板和一个 xib 窗口的应用程序 从情节提要到 xib 我以这种方式移动 ShowDreamNIBController detailViewController ShowDreamNIBController alloc in
  • Java如何在jar环境而不是IDE中读取文件夹并列出该文件夹中的文件

    我的问题是我在 src 下创建一个文件夹 名称是 IconResources 在 IconResources 中有很多图片 目录是这样的 ProjectName src 套餐1 套餐2 IconResources 这是目标文件夹 我想列出所
  • ES6 之前的类中的静态函数

    我的问题 见下文 是如何声明 STATIC 函数和常量pre ES6类所以它们可以被继承 在问题之前我们已经对当前的 ES6 类和 ES6 之前的类进行了回顾 因此我们都使用相同的约定 在 ES6 之后 我们可以在类中定义静态函数 如下所示
  • 实时显示中表格的垂直溢出应滚动内容

    我正在使用一个Live https rich readthedocs io en stable live html显示内容Table https rich readthedocs io en stable tables html随着时间的推
  • 在 C++ 中获取文本文件的第 n 行

    我需要读取文本文件的第 n 行 例如textfile findline 0 会找到加载的文本文件的第一行ifstream textfile 这可能吗 我不需要将文件的内容放入数组 向量中 我只需将文本文件的特定行分配给变量 特别是 int
  • NSDate/NSDateFormatter - 只存储时间,不存储日期?

    我一直在环顾四周 但没有看到任何可以解决这个问题的东西 所以我希望有人可以帮助我解决这个问题 我想做的是使用 NSDate 变量 在核心数据中 来存储时间 而不是日期和时间 而只是格式为 HH MM SS 的时间 查看 NSDateForm
  • 相对于旋转角度的矩形坐标

    我正在尝试使用 Surfaceview 和画布绘图在 Android 中创建自定义组件 这些组件可以通过触摸来调整大小和旋转 考虑创建一个图像视图 其顶部 右侧 底部和左侧边缘可通过触摸并拖动所需边缘进行缩放 我在用RectF为了保持组件的
  • 创建创建组的 django 数据迁移的正确方法?

    我想创建创建权限和组的数据迁移 以便我的其他开发人员可以运行迁移并完成所有设置 我能够创建迁移并运行它们 但现在运行测试时出现错误 但如果我这样做 from django contrib auth models import Group d
  • C++ vtable 通过虚拟继承进行解析

    我对 C 和虚拟继承很好奇 特别是解决低音类和子类之间 vtable 冲突的方式 我不会假装了解它们如何工作的具体细节 但到目前为止我所看到的是 由于该分辨率 使用虚拟函数会导致一些小的延迟 我的问题是基类是否为空 即它的虚拟函数定义为 v