虚函数的实现可以放在头文件中吗

2024-01-02

通常,如果我们将非虚拟成员函数的实现放入头文件中,该函数将被内联。如果我们将虚拟成员函数的实现放在头文件中怎么样?我想这与将其放入 cpp 文件中是一样的,因为内联和多态性不能一起工作。我的说法正确吗?


将方法的实现放入头文件中并不会使其内联。将其放入类声明中即可。从现在起我就假设这就是你的意思。

这里重要的是,声明内联函数只是向编译器提供信息,它不一定使该函数内联

大多数时候,编译器会忽略这一点,并且该方法不会被内联。

不过,可以有一个内联虚拟方法,如 c++ 常见问题解答中所述(http://www.parashift.com/c++-faq-lite/inline-virtuals.html http://www.parashift.com/c++-faq-lite/inline-virtuals.html): “内联虚拟调用可以被内联的唯一时间是当编译器知道作为虚拟函数调用目标的对象的“确切类”时。只有当编译器具有实际对象而不是指针或对对象的引用。即,无论是本地对象、全局/静态对象还是复合体中完全包含的对象。”

简而言之,仅当您不使用动态链接解析时(我们可以说“当我们不使用虚拟方法时”),编译器才会内联虚拟方法。

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

虚函数的实现可以放在头文件中吗 的相关文章

  • 具有相同参数类型但具有不同常量限定符的 std::vector 的转换

    问题很简单 静态转换 或其他一些转换 通常是安全的 std vector lt Foo gt to std vector lt const Foo gt 就二进制而言 我不明白为什么本机类型会有所不同 毕竟const是一种语言约束 不应影响
  • Linq - 从表达式 创建表达式

    我有一个谓词Expression
  • 是否有可能劫持标准输出

    我正在尝试使用 C 重定向 Windows XP 上已运行进程的标准输出 我知道如果我自己生成进程 我可以做到这一点 但对于这个应用程序 我更喜欢一个 监听器 我可以附加到另一个进程 这在纯 Net 中可能吗 如果不可能 在 Win32 中
  • 如何在特定时间以毫秒精度触发 C# 函数?

    我有两台计算机 它们的时间通过 NTP 同步 确保时间仅相差几毫秒 其中一台计算机将通过 TCP 向另一台计算机发送一条消息 以在两台计算机上的未来指定时间启动某个 c 函数 我的问题是 如何在特定时间以毫秒精度 或更好 触发 C 中的函数
  • 使用 Json.NET 序列化子类

    我正在尝试使用 Json NET 序列化子类 生成的 json 包含超类的序列化属性 但是not子类对象的属性 这似乎与我发现的一个问题有关这里就这样 https stackoverflow com q 5863496 498969 但必须
  • ASP.NET Web 应用程序中的身份验证遇到问题

    我正在尝试对从登录页面登录我的 Web 应用程序的用户进行身份验证 我正在使用本教程 http support microsoft com kb 301240作为指南 它几乎准确地解释了我希望做什么 但是当我输入用户名和密码时 验证不起作用
  • 自动映射器多对多 stackoverflowException

    我遇到以下映射的堆栈溢出 Mapper CreateMap
  • 为什么子函数不销毁GtkWindow?

    这是我的代码 void window first void enter window2 GtkWidget w gpointer data void quit GtkWidget w gpointer data void quit int
  • 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

    我有一个新安装的 MySQL 服务器 它监听 localhost 3306 从 Qt 应用程序连接到它的正确方法是什么 原来我需要将MySQL添加到ODBC数据源 我在遵循这个视频教程后做到了这一点 https youtu be K3GZi
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • 如何让XmlReader读取C#中的属性?

    我有一个 XML Stream 其中包含以下 XML 内容
  • 如何在 C# 中更改公共 IP 地址

    我正在创建一个 C winform 应用程序 我想在其中更改公共 IP 地址 而不是像 Hotspot Shield ZenMate OpenVPN 等那样更改 IPv4 地址 我已经检查了以下链接 但没有找到足够的帮助 所以我发布了这个问
  • 如何同步nosql db(ravendb)中的更改

    我已经开始在 RavenDB 的示例上学习 NoSQL 我从一个最简单的模型开始 假设我们有由用户创建的主题 public class Topic public string Id get protected set public stri
  • C++ 中是否有与 PHP 的explode() 函数等效的函数? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中分割字符串 https stackoverflow com questions 236129 splitting a string in c 在 PHP 中 explode 函数将获取一个字
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 如何从 Access 数据库中读取“是/否”值作为布尔值?

    帮我找回YES NO来自 MS Access 的布尔格式数据类型 我尝试解析它 但它总是返回 false 更新 实际上不是问题抱歉 它确实接受 YES NO 作为布尔值 OleDbconnection dbConnect new OleDb
  • “1个未解决的外部”C++

    我已经检查了所有文件之间的连接以及类和函数定义 但每次我尝试运行我的程序时 它都会阻止我并告诉我它有 1 个未解析的外部 该程序应该打开多个文件 一个 学生 文件和一个 成绩 文件 从中读取数据 然后使用 查询文件 来查找数据 找到查询中要
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 使用 CodeDOM 将程序集添加到 BuildManager 会导致间歇性错误

    我正在使用 CodeDOM 在运行时创建内存中程序集 如下所示 public Assembly Compile CodeCompileUnit targetUnit string path Path GetDirectoryName new
  • 实体框架代码首次日期字段创建

    我正在使用实体框架代码优先方法来创建我的数据库表 下面的代码 创建一个DATETIME数据库中的列 但我想创建一个DATE柱子 DataType DataType Date DisplayFormatAttribute ApplyForma

随机推荐

  • 在x64和x86环境中使用PresentationCore和WindowsBase dll

    PresentationCore dll 和 WindowsBase dll 均包含在 Microsoft NET Framework 3 0 中 并且每个 dll 的两个版本都安装到磁盘上 C Program Files Referenc
  • 调用未定义的方法 Closure::query()

    我有以下关闭 dbhProvider function Create connection instance new mysqli localhost USERNAME PASSWORD BLOG return instance 我有以下实
  • Swisscom 应用程序云更新后 Spring Boot HTTPS 重定向循环

    我们正在使用 Swisscom Application Cloud 来运行我们的 Spring Boot 应用程序 在 2018 年 2 月 22 日 迁移到多云环境 之后 瑞士电信状态页 https status developer sw
  • Jquery 隐藏多个div onclick

    我正在制作一个健身应用程序 在每个锻炼页面上我都有一个显示 信息 数据输入 和 进度 的按钮 然而 当单击按钮时 这工作正常 div 层彼此重叠并同时显示 我想要的是主要显示的信息 但当用户单击其他按钮时 其他按钮 div 被隐藏 因此一次
  • spring3 mvc @Valid注释找不到

    我尝试使用 Valid注释 但eclipse总是给出 Valid无法解析为类型 错误 我正在使用 spring3 库 我已将 hibernate validator 4 1 0 Final jar 导入到 WEB INF lib 目录中 然
  • LNK2019:VS 单元测试中未解析的外部符号

    我收到标题中所述的错误 我保证了以下几点 包含目录 包含库和附加包含目录设置正确 在属性中 子系统设置为 CONSOLE 对我的代码的评论 LifeLib 是一个项目 其中包含我想测试一些方法的类 这些类在命名空间 LifeLib 中定义
  • 滚动时保持 SVG 对象静态

    在我的 Web 应用程序中 我正在生成一个 SVG 文件 其中包含一个 标题 当用户向下滚动图像时 我希望该文件在窗口顶部保持可见 我可以想到两种方法来实现这一目标 但我正在寻找任何其他好主意 我的两个想法是 生成两个单独的 SVG 一个是
  • vb.net 中的 Excel 文件

    如何在 vb net 中打开 编辑 读取 Excel 列 例如 我想知道 B 列的值 直到它包含值的单元格 谢谢 使用 ADO Net Here s a link http www dotnetjohn com articles aspx
  • PostgreSQL - 按时间戳值分组?

    我有一张表 其中存储了采购订单 每行都有一个时间戳 指示下订单的时间 我希望能够创建一个报告 指示每天 每月或每年的购买数量 我想我会做一个简单的 SELECT COUNT xxx FROM tbl orders GROUP BY tbl
  • 如何抑制绘制树状图但仍然在seaborn中聚类?

    我想在seaborn中绘制一个聚类图 按行和列进行聚类 我不想绘制树状图 Setting row cluster False or col cluster False删除树状图 但也停止聚类 如何仍然进行 2D 聚类但抑制树状图 这个问题
  • 如何在 iOS 中查找 Couchbase Mobile DB 文件?

    我想在 iOS 中找到 Couchbase Mobile DB 文件位置 并请描述如何打开 db 文件 Thanks 如果您使用的是 CBM 1 4 或更早版本 您可以按照此处所述找到 cblite2 db 文件的位置 https deve
  • 如何将具有固定值的路径缩放为动态可组合大小?

    我有一个简单的Box我想将其剪辑为自定义形状的可组合项 但每当我尝试它时 形状的尺寸仍然非常僵硬且很小 我尝试使用在路径级别上进行缩放Matrix 但无济于事 这是示例 const val clockHand M0 80 52L2 86l2
  • Flex 4 Spark 面板有一个丑陋的灰色顶部

    我有一个 Flex 4 Spark 面板 我通过 PopUpManager 弹出 但它的顶部有一个我无法摆脱的灰色部分 那是什么以及如何删除它 UPDATE 下面是一个示例面板 我只是简单地打电话PopUpManager addPopUp
  • C 中 scanf 中的扫描集行为

    我尝试用 scanf 中的 scanset 做一些事情 但卡在某个地方 当我写的时候 char s1 250 scanf A Z s1 input AHJHkiuy Output AHJH 有了这个 scanf n s1 input abc
  • Joi 验证显示自定义错误消息

    嗨我正在使用 hapi joi 15 1 1 不幸的是 我现在无法更新到最新的 Joi 版本 这是我的验证架构 const schema name Joi string allow max 30 addLine1 Joi string re
  • 使用 NSTask 创建 zip 存档,其中包含包含文件的第一级文件夹

    我的方法适用于从先前创建和填充的临时目录中压缩文件 NSURL destURL self archiveDestURL NSTask task NSTask alloc init task setCurrentDirectoryPath s
  • .NET/CLR 上的 Scala 中的具体化泛型

    Scala 至少在JVM https en wikipedia org wiki Java virtual machine uses 类型擦除 https stackoverflow com tags type erasure info以实
  • php 使用 strtotime 获取一年中第一周的正确日期

    我使用此代码来获取一年中第一周的第一个日期 echo date Y m d strtotime 2018W01 JAN 1 is Monday returned 01 01 echo date Y m d strtotime 2013W01
  • 如何在 nextJS getserversideprops 中使用 firebase

    如果有签名用户 我想使用 getServerSideProps 在 Firestore 中获取 示例 文档 下面的代码不起作用 结果是 无法读取 我应该怎么办 或者还有其他方法吗 export const getServerSideProp
  • 虚函数的实现可以放在头文件中吗

    通常 如果我们将非虚拟成员函数的实现放入头文件中 该函数将被内联 如果我们将虚拟成员函数的实现放在头文件中怎么样 我想这与将其放入 cpp 文件中是一样的 因为内联和多态性不能一起工作 我的说法正确吗 将方法的实现放入头文件中并不会使其内联