C++ 类中的内联规则是什么?

2024-03-10

从我很久以前读到的内容来看,如果您希望在编译阶段内联类成员函数,则该函数必须在类声明块内定义。

但这有一个缺点,那就是细节泄露。恕我直言,其他程序员在打开 .h 文件时应该只看到类接口。

第一个陈述在现代 C++ 中仍然正确吗?有没有办法强制内联声明的函数,最好是在另一个文件中?

通常,将短成员函数保留在类声明块内是否更好?


看来,如果您希望在编译阶段内联类成员函数,则必须在类声明块内定义该函数。

这不是真的。一个函数是defined班级内定义被隐式标记为inline。但是您不需要在类中定义该函数inline,您可以明确请求它:

struct X {
   void f();
};
inline void f() {}

The inline另一方面,关键字并不意味着该函数将是inlined,而是它可以是defined在多个翻译单元中,也就是说,如果多个翻译单元包含包含该定义的相同标头,则链接器不会失败并显示多重定义错误.

现在,就实际inlining,编译器可以决定内联或不内联任何函数,无论该函数是否声明为inline前提是它看到定义该函数(它将内联的代码),这就是为什么一般来说应该内联的函数应该在标头中定义(在类定义内部或标记的内部)inline外部。

此外,较新的工具链可以执行整个程序优化或其他链接时间优化,链接器还可以通过这些优化来决定应该内联函数。在这种情况下,函数定义不需要visible在调用站点,因此可以在 .cpp 文件中定义它。但如果你真的想要这个功能inlined最好不要依赖此功能,只需在标头中定义该函数即可。

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

C++ 类中的内联规则是什么? 的相关文章

  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框

随机推荐

  • 如何注册一个类以在 Qt 中的 QWebChannel 信号中使用它

    我使用 QT 5 和 WebChannel 与 HTML 页面进行通信 我成功地能够传达文本和字符串 不过我想传达一些点数据 官方文档说 不需要手动消息传递和数据序列化 http doc qt io qt 5 qwebchannel htm
  • MVVM 中的后台线程进度通知?

    如何修改 MVVM 视图模型Progress在后台线程上完成的工作的属性 我正在创建一个 MVVM 应用程序 它在后台线程上执行任务 使用Task Factory StartNew and Parallel ForEach 我在用本文 ht
  • AT+CUSD 无法在华为 e3131a 调制解调器上工作

    我试图发送 at 命令以在 huawei e3131a 调制解调器上获得平衡 但无论我使用什么配置 GSM IRA UCS2 我总是收到 Ok 作为答案 我还尝试更改操作员代码 123 到许多格式 如十六进制 PDU 简单字符串 但无法获得
  • 使 in 子句将所有项目与任何替代项相匹配?

    我有一张桌子hotel hotelid hotelname etc 和另一张桌子facilities facilityid facilityname 这两个表通过 table 链接hotel to facilities map hoteli
  • 使用从 bash 中的文件读取的数组并行化 while 循环

    我在 Bash 中有一个 while 循环 处理如下 while IFS t read r a line do myprogram line 0 line 1 line 0 vs line 1 result done lt fileinpu
  • 我想禁用特定航空窗口上的阴影效果

    我想禁用特定航空窗口上的阴影效果 我所拥有的只是该窗口的 HWND 这可能吗 阴影由操作系统当前使用的主题定义 您不能仅针对一个窗口禁用它 您可以更改主题并禁用阴影 但这将是系统范围内的更改 而不是特定于某个窗口 就您而言 最好的方法之一是
  • 从 SSIS 执行 SQL 任务返回整数值

    我正在使用 SQL Server 2005 Business Intelligence Studio 并努力从一个非常简单的执行 SQL 任务返回一个整数值 为了一个非常简单的测试 我将 SQL 语句编写为 Select 35 As Tot
  • NSManagedObjectModel - 动态创建模型

    谁能给我指点一下在 Xcode 中动态构建核心数据模型的教程吗 我发现的所有教程都是基于静态设计 但苹果文档说可以以编程方式构建模型 遗憾的是 苹果文档集中没有相关示例 你必须初始化一个NSManagedObjectModel 然后为模型中
  • Bash:无限睡眠(无限阻塞)

    I use startx启动 X 它将评估我的 xinitrc In my xinitrc我使用启动窗口管理器 usr bin mywm 现在 如果我终止我的 WM 为了测试其他 WM X 也会终止 因为 xinitrc脚本到达 EOF 所
  • 如何让 ServiceStack 身份验证发挥作用? (使用 iPhone 客户端)

    我们聘请了一名承包商 他正在为我们编写 iPhone 应用程序 我开始使用 ServiceStack 为其编写后端服务 我在一般授权方面遇到了困难 使用什么样的授权以及如何实现它 我对 ServiceStack HTTP 和授权不太了解 还
  • JFormattedTextField 中严格的 24 小时时间

    我正在尝试创建一个仅接受 24 小时时间的 JFormattedTextField 我非常接近解决方案 但有一种情况以下代码示例不起作用 如果输入时间 222 并从字段中更改焦点 时间将更正为 2202 我希望它只接受完整的 4 位数 24
  • 为 SQL Server 中的特定记录生成脚本

    这可能是一个有限但有价值的场景 我有一个 SQL Server 2008 数据库 其中有一个包含数百万条记录的表 一些记录似乎存在间歇性问题 我正在尝试重现该问题 为了做到这一点 我终于获得了违规记录的 ID 我想在我的 PROD 数据库中
  • 如何从 C# 代码重新启用 Gmail 中的弹出功能?

    我有一个从 Gmail 下载邮件的程序 我选择了单选按钮 为所有邮件启用 POP 甚至是已下载的邮件 下载邮件后 我的 Gmail 将上述状态更改为 对自当前日期以来到达的所有邮件启用 POP 我没有物理更改单选按钮 但它似乎自动将其设置为
  • 如何在剑道网格中加载大量数据

    网页方法
  • calloc(4, 6) 与 calloc(6, 4) 相同吗?

    我是一名初学者 C 程序员 我认为情况会如此 但如果可能的话希望得到一些肯定 如果它们是相同的 为什么不只取一个参数呢 之间没有真正的区别calloc a b and calloc b a 尽管如此 它们都分配相同数量的空间并适当填充它 元
  • 嵌套名称说明符

    我有一个类似的代码 namespace mymap template
  • 可拖动元素的包含

    如何定义可拖动对象的包含区域以使其可拖动到其父元素之外 我有两个可放置的容器 其中有可拖动的 div 我想在容器之间拖动包含的 div 但是 div 落在父容器的边框下方 而不是穿过父容器的边框 如果我设置了非常高的 z 索引 我只能让 d
  • 如何在 HTML5 Canvas 中使用动态旋转值绘制水印?

    我正在使用 HTML5 我正在尝试使用文本在图像上绘制水印 我有以下代码 div style width 612px height 792px div
  • 可可中的自定义主应用程序循环

    我一直在关注 Handmade Hero 项目 其中 Casey Muratori 从头开始 创建了一个完整的游戏引擎 而不使用库 该引擎具有高度可移植性 因为它呈现自己的位图 然后平台特定的代码将其绘制到屏幕上 在 Windows 下 通
  • C++ 类中的内联规则是什么?

    从我很久以前读到的内容来看 如果您希望在编译阶段内联类成员函数 则该函数必须在类声明块内定义 但这有一个缺点 那就是细节泄露 恕我直言 其他程序员在打开 h 文件时应该只看到类接口 第一个陈述在现代 C 中仍然正确吗 有没有办法强制内联声明