inline内联函数

一句话总结

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

举例

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

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

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

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

1. 普通函数(无 inline)
cpp 复制代码
// 函数定义(像"附录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)
cpp 复制代码
// 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. 适合短函数:只有一两行的简单函数(如求最大值、交换变量)才适合内联,长函数内联反而不好。
相关推荐
了了4 小时前
图搜索基础学习笔记
算法
const_qiu4 小时前
第四章 05:4.5 Multi-Agent —— 五个专职智能体协作
java·人工智能
我就是不信4 小时前
Java8 lambda 表达式 forEach 如何提前终止?
开发语言·windows·python
Cx330❀4 小时前
深入浅出 Qt 绘图机制:从 QPainter 到四大图像类解析
开发语言·qt·ui·性能优化·图形渲染
A小码哥4 小时前
大模型成本怎么降,5 个动作先做前两个
java·前端·spring
淡海水4 小时前
05-02-源码-Boehm GC标记阶段
算法·unity·c#·游戏引擎·gc
鬼手点金4 小时前
构建有效 Agent 的核心原则
java·人工智能·git·学习·自动化
神魔皆以血嗜5 小时前
Java 实现简单状态机(订单状态流转)
java·后端
信可维5 小时前
AI 读 Word 表格总读错?先查合并单元格和表头这 3 处
开发语言·人工智能·c#·word·软件工程
随性而行3605 小时前
企业微信 API 如何实现业务消息自动通知?接口应用场景解析
java·人工智能·后端·微信·机器人·企业微信