C++内联函数inline

2023-11-08

C++内联函数 inline

1 基本内容

  C++中内联函数(inline)和传统C语言宏定义(#define)类似,原则上实现的过程都是表达名称或内容的替换,但是处理方法上会存在差别。内联函数的推出,也正是C++引入类后,为了取代存在一些缺点的宏定义。
  内联函数的作用是当你需要过于频繁执行一些简单函数时,可以inline关键字开头来定义函数,从而以牺牲空间的方式来节省函数调用的开销。
  这里简单函数指那些,内部没有循环,开关等复杂语句的函数。如果函数过于复杂,反而大大降低了效益提高带来的益处。

  注:传统C语言里面并没有inline关键字。

2 与宏定义区别 

  • 宏定义是在预处理阶段展开,不进行参数圧栈,不涉及类型检查,不生成代码等。
  • 而内联函数是在编译阶段,编译器使用函数体内容直接替换调用函数名的地方。但是编译器会检查参数类型,保证调用的准确性。这样虽然消耗了内存空间,但是节省了过度调用函数的开销。

  • 它俩原则上都是名称或内容替换的一个过程。

3 实例

3.1 宏定义
  #define Max(a,b) a>b ? a:b //没有分号
3.2 内联函数inline
    template <typename T>
    inline T max(const T &a , const T &b)
    {
       return a>b ? a:b;
    }
3.3 类内和类外定义类方法区别

直接在类声明中定义实现的函数会自动成为内联函数,即:

class CTest
{
    public:
        int GetRel(int x) //该成员函数自动成为内联函数
        {
            return x ; 
        }
}

而在类外定义时需要添加inline关键字,这样才能实现内联函数的功能。如下:

inline int CTest::GetRel(int x)
{
    return x;
}

个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

转载请注明出处:CSDN 无鞋童鞋。

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

C++内联函数inline 的相关文章

  • C++ 维护子类对象的混合集合

    如果我在这里错过了一个相当基本的概念 我很抱歉 但我正在尝试弄清楚如何维护多个类类型的集合 所有类类型都派生自同一个父类 并且在检索它们时仍然可以访问它们的特定于子类的方法从集合中 作为上下文 我有一个基类 BaseClass 和许多类 例
  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 当一组凭据下的计划任务启动的进程在另一组凭据下运行另一个程序时,Windows 是否有限制

    所以我有一个简单的例子 其中我有应用程序 A 它对用户 X 本地管理员 有一些硬编码的凭据 然后它使用硬编码的绝对路径启动带有这些凭据的应用程序 B A 和 B 以及 dotnet 控制台应用程序 但是它们不与控制台交互 只是将信息写入文件
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • C++ - "std" has no member "string"

    C 中使用 string 类型 需要两个步骤 包含头文件 include string h 使用std命名空间 include string h using namespace std int main int argc char argv
  • 图解算法学习笔记(八):贪婪算法

    目录 1 背包问题 2 集合覆盖问题 3 NP完全问题 4 小结 本章内容 学习如何处理没有快速算法的问题 NP完全问题 学习近似算法 使用它们找到NP问题的近似解 学习贪婪策略 1 背包问题 假设你是个贪婪的小偷 背着可装35磅重东西的背
  • Vue2学习第九篇:条件渲染

    一 条件渲染 1 v if 写法 1 v if 表达式 2 v else if 表达式 3 v else 表达式 适用于 切换频率较低的场景 特点 不展示的DOM元素直接被移除 注意 v if可以和 v else if v else一起使用
  • matlab 神经网络ann用于分类方法

    matlab关于ann的分类方法讲解了一个例子 Fishr集上鸢尾花 Iris 的分类 学习了这个方法可以套用在个人项目上使用 万变不离其宗 1 Fishr集上鸢尾花Iris数据集的分类 iris数据集简介 iris数据集的中文名是安德森鸢
  • Unity制作一个简单的登入注册页面

    1 创建Canvas组件 首先我们创建一个Canvas画布 我们再在Canvas画布底下创建一个空物体 取名为Resgister 把空物体的锚点设置为全屏撑开 2 我们在Resgister空物体底下创建一个Image组件 改名为bg 我们也
  • 实例:

    语句 2 通常语句 2 用于评估初始变量的条件 语句 2 同样是可选的 如果语句 2 返回 true 则循环再次开始 如果返回 false 则循环将结束 提示 如果您省略了语句 2 那么必须在循环内提供 break 否则循环就无法停下来 这
  • 若依v3.2问题解决:菜单路由不匹配 / 跳转路由页面空白

    问题1 解决方法 问题2 解决方法 问题1 菜单路由不匹配 在菜单管理中匹配代码中的相应组件 可是在页面上总是报匹配错误 下面是报错情况和相关数据库 解决方法 因为店铺管理是一个目录 而店铺详情和店铺列表是菜单 路由规则中目录要有一个菜单匹
  • 台式机跳过连网

    第一次激活电脑 台式 本人是联想 没有内置无线网卡 就非让连接以太网 有线 又没有 查了好久 终于解决了 方法一 taskmgr 1 Shift F10 台式机 2 输入taskmgr 3 去任务管理器找到OOBENetworkConnec
  • Unity ToLua 之 Lua调用C#(二)

    Unity ToLua 之 Lua调用C 二 一 ToLua调用C 中的List和Dictionary 注意List和dictionary对应的泛型需要先填写到CustomSetting中 然后生成 XLua 中遍历Dictionary可以
  • 进IT名企大厂,95%应届生不知道的最短路径

    据央视新闻报道 2022年高校毕业生将达到1076万人 据称是史上最难就业季 毕业生就业压力暴增 加之随着今年疫情的不确定爆发 不少企业减少了校园招聘 留学生扎堆回国 可以说是将 就业难 进行到底了 但在此情况下 互联网大厂 IT名企却在逆
  • 【React + Ant Design】表单如何在前置项未填写时禁止后置项交互并提示

    在 react antd 中 对表单做在前置项未填写时禁用后置项交互并提示的效果 情景 最近有这么个需求 某个业务中 要填写一张表单 其中有这样两项 选择数据连接和选择数据表 数据表是数据连接下所拥有的表 通常 没选数据连接 数据表就拿不到
  • C++(day5)

    思维导图 小练习 实现一个图形类 Shape 包含受保护成员属性 周长 面积 公共成员函数 特殊成员函数书写 定义一个圆形类 Circle 继承自图形类 包含私有属性 半径 公共成员函数 特殊成员函数 以及获取周长 获取面积函数 定义一个矩
  • 无线水标数值如何上传服务器,一种精准上传数据的智能水表及用水量记录上传方法...

    1 一种精准上传数据的智能水表 包括计数上传模组电路板 1 齿轮组件 2 计数组件 3 叶轮组件 4 所述叶轮组件 4 位于水表内部的流道内 叶轮组件 4 向上连接驱动齿轮系组件 2 齿轮系组件 2 连接计数器组件 3 计数器组件 3 连接
  • kali控制安卓(拍照、通讯录、GPS等)

    只是感觉挺有趣的就学了一下并分享出来 仅供学习使用 1 生成apk 目标手机安装 msfvenom p android meterpreter reverse tcp LHOST 192 168 1 176 LPORT 8888 R gt
  • python 添加父目录到工作路径中,解决import无法找到路径的问题

    解决方法 在运行的程序中添加 import os import sys sys path append sys path append os pardir
  • C# abstract抽象类的定义,作用(使用场景)

    关于C 中抽象类的一些感想 写代码已经有很长一段时间 但感觉成长很少 基本是为了功能开发而开发 我相信80 的程序员都一样 基本都是拿网上的开源项目改改改后实现功能就行 很少会去深入 去思考为什么要这么来实现 所以有了今天的文章 我作为程序
  • Qt 迭代器(的两种风格,及方法简介)

    目录 Qt 迭代器 的两种风格 及方法简介 qt qlist简单迭代器的使用 Qt学习 qt中的迭代器举例 一 java风格迭代器 容器类 只读迭代器类 读写迭代器类 QList lt T gt QQueue lt T gt QListIt
  • OpenHarmony兼容性平台认证接入

    最近在做OpenHarmony兼容性平台认证接入 在此记录一下整个过程遇到的问题和解决办法 注册账号 进入OpenHarmony兼容是测评主页 https www openharmony cn certification document
  • DHCP服务器

    目录 一 DHCP是什么 二 DHCP服务器地址池是如何正确分配的 三 DHCP工作原理 广播域内 四 DHCP中继代理原理 广播域外 五 更新IP租约 六 超级作用域 七 DHCP配置案例 中继 一 DHCP是什么 动态主机配合协议 使用
  • C++内联函数inline

    C 内联函数 inline 1 基本内容 C 中内联函数 inline 和传统C语言宏定义 define 类似 原则上实现的过程都是表达名称或内容的替换 但是处理方法上会存在差别 内联函数的推出 也正是C 引入类后 为了取代存在一些缺点的宏