当前位置: 首页 > news >正文

inline内联函数

一句话总结

inline 是让编译器把函数 "展开" 到调用处的建议,目的是用代码体积换执行速度适合简短且频繁调用的函数。inline 会让编译器会尝试把函数代码直接 "复制粘贴" 到调用它的地方,而不是跳转到函数定义处执行。

举例

想象你写文章时,经常需要用到 "世界上最高的山峰是珠穆朗玛峰" 这句话。有两种写法:

  1. 普通函数式:每次需要时,都写 "参见附录 A",然后在附录 A 里写完整句子。
  2. inline 式:每次需要时,直接把完整句子写在当前位置。

普通函数 vs inline 函数(代码对比)

假设我们要实现一个简单的 "求两数之和" 功能:

1. 普通函数(无 inline)
// 函数定义(像"附录A")
int add(int a, int b) {return a + b;
}// 调用处
int main() {int x = 10, y = 20;int result = add(x, y);  // 这里会跳转到add()函数的位置执行return 0;
}

执行过程
调用 add(x,y) 时,程序会先暂停当前工作,保存现场(如寄存器数据),跳转到 add 函数的代码处执行,计算完成后再跳转回来,恢复现场。这个过程有额外开销。

2. inline 函数(有 inline)
// inline函数定义(像"直接写完整句子")
inline int add(int a, int b) {return a + b;
}// 调用处
int main() {int x = 10, y = 20;int result = add(x, y);  // 编译器可能直接替换为:int result = x + y;return 0;
}

执行过程
编译器看到 inline 后,会尝试把 add(x,y) 直接替换成 x + y,省去了函数调用的跳转和现场保存开销,就像直接写 x + y 一样高效。

为什么要用 inline

  • 优点:减少函数调用的 "额外开销"(尤其适合频繁调用的短函数)。比如循环中调用的小函数,内联后能明显提速。
  • 缺点:如果函数体很大(比如几十行代码),内联会导致代码重复 "复制粘贴",使最终的程序体积变大(代码膨胀),反而可能降低效率。

关键注意点:

  1. 编译器说了算inline 只是 "建议",不是 "命令"。如果函数体复杂(有循环、递归等),编译器会无视 inline,按普通函数处理。
  2. 通常放头文件inline 函数的定义需要让编译器在调用处 "看得到",所以一般写在头文件里(普通函数通常只在头文件声明,源文件定义)。
  3. 适合短函数:只有一两行的简单函数(如求最大值、交换变量)才适合内联,长函数内联反而不好。

http://www.dtcms.com/a/352500.html

相关文章:

  • TensorFlow 深度学习:使用 feature_column 训练心脏病分类模型
  • 【软考论文】论可观测性架构技术的应用
  • 【资源】Github资源整理
  • C6.3:发射结交流电阻
  • Vue3 + Element Plus实现表格多行文本截断与智能Tooltip提示
  • 【黑客技术零基础入门】2025最新黑客工具软件大全,零基础入门到精通,收藏这篇就够了!
  • 【数据结构】单链表详解
  • Java基础 8.26
  • 【7】SQL 语句基础应用
  • 基于SpringBoot的演唱会网上订票系统的设计与实现(代码+数据库+LW)
  • 自由学习记录(89)
  • 一份兼容多端的HTML邮件模板实践与详解
  • 美妆品牌如何用 DAM 管理海量产品图片?
  • 开脑洞,末日降临,堡垒求生,ARMxy系列BL410能做什么?
  • vagrant怎么在宿主机管理虚拟机镜像box(先搁置)
  • 中国移动云电脑一体机-创维LB2004_瑞芯微RK3566_2G+32G_开ADB安装软件教程
  • 【自监督检测】HASSOD:Hierarchical Adaptive Self-Supervised Object Detection
  • 《基于 Spring Boot 的足球青训俱乐部管理后台系统设计与实现--文末获取源码》
  • wsl安装的系统更换路径
  • 【Modbus-TCP】linux为主机—PC为从机通信
  • 8.26 支持向量机
  • GD32和STM32的区别在哪里?
  • Python训练营打卡 DAY 48 随机函数与广播机制
  • 摩尔信使MThings V0.8.1更新要点
  • flume监控目录文件实战:三种 Source 方案对比与配置指南
  • vue新增用户密码框自动将当前用户的密码自动填充的问题
  • Windows server 2019安装wsl2
  • Python3.11升级到高版本-aioredis兼容问题
  • 洛谷: CF632D Longest Subsequence-普及+/提高
  • 下载python离线安装包,在无网络机器安装方法