内联成员函数和普通成员函数有什么区别?

2023-11-30

内联成员函数(函数体内联)和其他普通成员函数(函数体在单独的.cpp文件中)有什么区别吗?

例如,

class A
{
  void member(){}
};

and

// Header file (.hpp)

class B
{
  void member();
};

// Implementation file (.cpp)

void B::member(){}

绝对没有区别。

两者之间的唯一区别是类内的成员被隐式标记为内联。但这没有任何实际意义。

See: 内联和良好实践

文档说内联标记是向编译器(由开发人员)提示应该内联方法。所有现代编译器都会忽略此提示,并使用自己的内部启发式方法来确定何时应内联方法(因为人类是出了名的糟糕并做出此决定)。

内联的另一个用途是它告诉链接器它可能期望看到一个方法的多个定义。当函数定义位于头文件中时,获取头文件的每个编译单元都会有该函数的定义(假设它不是内联的)。通常这会导致链接器生成错误。通过内联标记,编译器可以理解为什么有多个定义,并将从应用程序中删除除一个定义之外的所有定义。

关于内联进程的注意事项:方法不需要在头文件中才能内联。现代编译器有一个完整的应用程序优化过程,其中所有函数都可以考虑内联,即使它们是在不同的编译单元中编译的。由于内联标志通常被忽略,因此如果将该方法放入标头或源文件中,则没有什么区别。

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

内联成员函数和普通成员函数有什么区别? 的相关文章

  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName

随机推荐

  • 在 Matlab 中组合 2D 矩阵形成 3D 矩阵

    我有 3 个20x2 double arrays A B and C 我想将它们组合成一个 3d 数组D以便D 1 将返回A D 2 将返回B and D 3 将返回C Using cat沿着三维连接可能是一种优雅的方式 D cat 3 A
  • 如何检索 SQL Server RAISERROR(或 PRINT)消息?

    我正在尝试使用 PyODBC 从 python 中的 SQL Server Raiserror 获取警告消息 严重性故意设置得很低 因为它充当打印功能 但不必等到查询完成后再进行打印 我期望的输出会是这样的 Test Message col
  • SQL Server - 对值来自另一个表的列进行 CHECK 约束

    如何在列上设置 CHECK 约束 使其可接受的值范围来自另一个表 而无需硬编码 这是一个简化的示例 OneManyTable RoleID TaskID 10 Val1 10 Val2 20 Val1 20 Val2 MetaDataTab
  • javascript等待php完成功能并刷新页面

    我有以下案例 我有下拉菜单 可以从其中选择网站的货币并使用 onchange 事件触发 javascript 函数 Changecurrency 通过使用jquery的changecurrency 函数 我触发php文件 以便根据下拉选择的
  • Spark 迭代/递归算法 - 打破 Spark 沿袭

    我有一个递归 Spark 算法 它将 10 天的滑动窗口应用于数据集 原始数据集是从按日期分区的 Hive 表加载的 在每次迭代中 一组复杂的操作将应用于包含十天窗口的数据集 然后 最后一个日期被插入到原始 Hive 表中 下一个日期从 H
  • Python 老化时间,第 2 部分:时区 [重复]

    这个问题在这里已经有答案了 继我之前的问题之后 Python 老化时间 我现在遇到了一个关于时区的问题 事实证明它并不总是 0200 因此 当 strptime 尝试这样解析它时 它会抛出异常 我想过用 6 或其他什么方法去掉 0200 但
  • 为什么标记不出现?

    我拥有的 一个 RecyclerView 其中包含餐厅 酒吧等的图像 单击这些图像时会将您带到地图 我想要的 当点击它们时 您会看到一张带有标记的地图 其中标记有您周围的所述地点 我的问题 我在另一个应用程序中执行此操作 但另一个应用程序直
  • ILogger 未注入 Durable Functions v2.0

    目前我正在尝试添加一个ILogger or ILogger lt gt 到 Azure Durable Function 以便在活动函数中使用日志记录 登录编排函数工作正常 并被注入到方法本身中 但尝试构造函数注入ILogger总是导致空异
  • 强制 L1 缓存上的一些数据

    对这个简单的问题表示歉意 仍在与这里的一些内存概念作斗争 问题是 假设我有一个预先计算好的数组 A 我想重复访问它 有没有办法告诉 C 程序让这个数组尽可能靠近 CPU 缓存以获得最快的访问速度 谢谢 在大多数架构上 无法强制阵列使用 L1
  • 红袜混音和延迟

    我正在使用 SOX 混合音频 命令SOX m voice wav audio wav final wav是我正在使用的 我的目标是延迟 10 秒的 voice wav 如果我尝试使用延迟 10 0 那么我会得到双语音 怎样才能做对呢 htt
  • Android Studio 虚拟设备卡在 G 屏幕上

    被困在这个问题上太久了 在Android Studio上启动了一个新项目基本活动应用程序 制作了一个虚拟设备 但每当我启动它时 它都会转到一个 黑屏 然后我擦除了内存 现在它卡在带有 google G 徽标的屏幕上 下面有一个小加载栏 多斯
  • 制作更薄的 UITabBar

    我希望能够通过删除每个项目的标题并回收它们占用的垂直空间来缩小 UITabBar 的高度 就像 Tweetie 2 那样 这似乎无法在 xib 中或以编程方式设置 我是否必须子类化 UITabBar 并推出自己的 自己滚 我确信 Tweet
  • 短路逻辑求值运算符

    是否有短路逻辑运算符 特别是短路AND和短路OR 我可以用在WHEREMySQL 5 5 中的子句 如果没有 有什么替代方案 我的问题的抽象观点以及为什么我需要这个的解释可以在这个小提琴中找到 http sqlfiddle com 2 97
  • 如何在CSS中仅设置部分文本的样式[重复]

    这个问题在这里已经有答案了 我需要在下拉列表选项中添加上标 我尝试了很多方法但没有任何效果 因此 帮助我了解如何仅设置选项文本的一部分的样式 使其看起来像上标 如果您知道在下拉列表选项中添加上标的任何其他方法 请帮助我 谢谢 在 HTML
  • 为什么相同的输入返回两个不同的 MD5 哈希值?

    好吧 我有两个文件 它们是完全相同的 第一个文件是 http iadsonline com servconfig php 第二个文件是 http xzerox info servconfig php 但是 当我使用 md5 file 获取他
  • 创建时CYPHER存储相同标签的节点关系顺序

    我有多个源自一个节点的关系 这些关系中的每一个都具有相同的标签 这些关系指向一个子节点 不一定是唯一的 在获取通过此关系标签链接到父级的所有子节点后 我通过名为 trueindex 的关系属性对它们进行排序 然后 我有一个节点数组 我的客户
  • 预处理器中的 C# 宏定义

    C 是否能够像 C 编程语言中使用预处理器语句那样定义宏 我想简化某些重复语句的常规输入 如下所示 Console WriteLine foo 不 C 不支持像 C 那样的预处理器宏 另一方面 Visual Studio 有snippets
  • 片段中的 AdMob

    我正在我的应用程序中插入 AdMob 但我有一个问题 当我在 Eclipse 中插入一些相关代码时 我可以在fragment 03中看到一条关于 构造函数 AdRequest 不可见 的错误消息 以及 错误 解析 XML 时出错 未绑定前缀
  • 获取上周六的日期和下周五的日期

    我想根据今天的日期获取上周六的日期 所以如果我们是周二 那么想要的日期将是 3 天前 另外 如果今天是星期六 那么这将被算作上一个星期六 例如 today Tuesday 09 July 2019 previous saturday gt
  • 内联成员函数和普通成员函数有什么区别?

    内联成员函数 函数体内联 和其他普通成员函数 函数体在单独的 cpp文件中 有什么区别吗 例如 class A void member and Header file hpp class B void member Implementati