1、基本概念
内联函数是一种编译器优化技术,通过将函数调用替换为函数体代码来减少函数调用的开销。
示例:
// 普通函数
int add(int a, int b) {
return a + b;
}
// 内联函数
inline int inlineAdd(int a, int b) {
return a + b;
}
int main() {
int x = 5, y = 3;
// 普通函数调用:会有函数调用开销
int result1 = add(x, y); // 跳转到add函数
// 内联函数调用:可能被直接替换为代码
int result2 = inlineAdd(x, y); // 可能被替换为 x + y
return 0;
}
2、工作原理
编译器在编译时,将内联函数的函数体直接插入到每个调用点,避免了:
-
函数调用的压栈、跳转、返回等开销
-
参数传递的开销
-
返回值的处理开销
3、定义方式
使用inline关键字:
inline int max(int a, int b) {
return a > b ? a : b;
}
4、优点
-
减少函数调用开销:特别适合小型、频繁调用的函数
-
避免宏的缺点:比宏更安全,有类型检查
-
代码优化:编译器可以优化内联后的代码
5、缺点
-
代码膨胀:每个调用点都会复制函数体,增大可执行文件
-
编译器决定权 :
inline只是建议,最终由编译器决定是否内联 -
调试困难:内联后函数没有独立的栈帧
6、与宏定义的比较
// 宏 - 文本替换,无类型检查
#define MAX_MACRO(a, b) ((a) > (b) ? (a) : (b))
// 内联函数 - 类型安全
template<typename T>
inline T maxInline(T a, T b) {
return a > b ? a : b;
}
// 宏的问题:可能产生副作用
int x = 5, y = 3;
int result = MAX_MACRO(x++, y++); // x可能被递增两次!