目录
一、复习宏函数:
在了解内联函数前,首先回顾一下宏函数。
以下是一个简单的两个数相加的宏函数:
宏函数有许多优点,最主要的是使用空间换时间,提高了性能,但是会增加代码体积。
1.宏函数的优点:
1.无需建立栈帧,会在调用的地方直接展开,属于空间换时间。
2.增强了代码的复用性
3.可以不指定参数类型
2.宏函数的缺点:
一个正确的宏函数,每个参数都要使用圆括号包裹,而且要将函数体使用一个圆括号包裹。
不能指定参数的类型。
不能在结尾加分号。
不能调试,没有对参数类型的检查。
二、内联函数的诞生:
内联函数出现在cpp中,可以看作是对宏函数的优化。
1.什么是内联函数?
内联函数,功能上类似宏函数,都会在调用处展开,而不是建立栈帧空间。书写上和普通函数相同,只在开头加上关键字inline。
2.如何定义内联函数?
内联函数的创建十分简单,只需在普通函数的返回类型前加上inline即可,以下是一个简单的内联函数。
3.内联函数的优点:
内联函数具有宏函数的所有优点,而且写起来更容易,没有宏函数那么多要注意的点,只需在常规函数之前加上inline关键字即可。
4.内联函数的特性:
1.内联函数属于一种空间换时间的做法。但是当一个内联函数的函数体过大,而且在主函数中多次调用,被多次展开,就会导致生成的可执行文件过大。造成代码膨胀。
因此,内联函数属于是对编译器的建议,即使为函数加上inline,编译器也会自己酌情考虑要不要当作内联函数使用。
一般情况下,不超过10行的短小函数,才有可能被编译器准许为内联函数。
2.内联函数的声明和定义不能分离。
因为内联函数被调用后直接在调用处展开,因此,在汇编阶段生成符号表时,编译器不会为内联函数生成符号和地址。
如果在其他文件调用内联函数,因为不能够在符号表找到内联函数的符号,编译器会报错。
5.需要注意的点:
如果要调试内联函数,需要在debug模式下;
在release模式下,编译器会优化代码,无法调试。