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