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 比宏更安全,推荐使用 |