133.为什么不能把所有的函数写成内联函数?
133.为什么不能把所有的函数写成内联函数?
内联是用 “空间换时间”,滥用会导致代码体积爆炸,反而更慢,还会带来其他问题。
1. 代码膨胀(最主要原因)
内联函数会在每一个调用的地方直接展开,不产生函数调用。
如果一个函数被调用 1000 次,就会插入 1000 份副本。
- 函数越多、越复杂 → 可执行文件急剧变大
- 代码太大无法全部放进 CPU 缓存 → 缓存命中率下降 → 程序反而更慢
2. 编译器不一定听你的
inline 只是建议,不是命令。
- 函数复杂(循环、递归、大量语句)
- 虚函数、递归函数编译器会自动拒绝内联,写了也白写。
3. 递归函数无法内联
内联要求编译期直接展开,
递归不知道要展开多少层,根本无法展开。
4. 虚函数一般不能内联
虚函数是运行时多态,调用哪个要运行时才确定,
编译期无法直接展开,所以内联无效。
5. 函数指针调用无法内联
如果用函数指针调用,编译器不知道指向哪个函数,
无法在编译期展开。
6. 调试困难
内联函数在目标代码中没有独立地址,
调试时无法打断点、无法单步进入,bug 难定位。
适合内联的只有这类函数
- 函数体非常短小(几行)
- 调用非常频繁
- 没有循环、递归、复杂逻辑
最终一句话总结(背这个)
内联会造成代码膨胀、降低缓存效率,且递归、虚函数、复杂函数无法内联;同时会导致调试困难,因此不能所有函数都内联。

浙公网安备 33010602011771号