【C/C++】inline关键词
C++ inline 关键字学习笔记
 
一、什么是 inline 函数?
 
inline(内联)是 C++ 中的一个关键字,表示“将函数的代码直接插入到调用点”,以减少函数调用开销,提升执行效率。
✅ 注意:
inline是一种“请求”,编译器不一定会采纳它。
二、为什么使用 inline?
 
通常,函数调用会有如下流程:
- 参数压栈
- 跳转到函数地址
- 执行函数体
- 返回并恢复现场
这个过程有一定的性能开销。对于体积小、调用频繁的函数,可以使用 inline 来减少这些开销。
三、如何使用 inline?
 
✅ 语法格式:
inline 返回类型 函数名(参数) {// 函数体
}
四、代码示例
🔹 示例一:普通函数
int add(int a, int b) {return a + b;
}int main() {int result = add(1, 2);  // 正常函数调用,有开销
}
🔹 示例二:inline 函数
 
inline int add(int a, int b) {return a + b;
}int main() {int result = add(1, 2);  // 编译器可能会将调用展开为 int result = 1 + 2;
}
- 优势:省去了函数调用的跳转和返回,提升性能。
- 缺点:如果函数体太大、频繁展开,会增加可执行文件体积(代码膨胀)。
五、适合使用 inline 的场景
 
| 适合用 inline 的情况 | 不适合用 inline 的情况 | 
|---|---|
| 函数体非常小 | 函数体很大 | 
| 调用频繁 | 很少调用 | 
| 希望去除调用开销 | 对性能影响不大 | 
| 函数定义通常写在头文件中 | 函数定义隐藏在源文件中 | 
六、常见应用
🔸 头文件中定义的函数默认建议加 inline
 
// math_utils.hpp
#pragma onceinline int square(int x) {return x * x;
}
如果你不加 inline,多处包含这个头文件时,会造成链接错误(重复定义)。
七、与宏的对比
#define ADD(a, b) ((a) + (b))     // 宏inline int add(int a, int b) {   // inline 函数return a + b;
}
- 宏没有类型检查、可能有副作用
- inline函数安全、可调试、有作用域
✅ 结论:inline 更推荐使用!
八、总结
| 项目 | 说明 | 
|---|---|
| 作用 | 减少函数调用开销,将函数体插入到调用点 | 
| 使用场景 | 函数体小、调用频繁、在头文件中定义 | 
| 注意事项 | 编译器不一定接受;不要滥用大型函数内联 | 
| 替代宏 | inline 比宏更安全,推荐使用 | 
