什么是内联函数
使用内联函数的好处以及缺点
C++对内联函数的限制
内联函数与宏
什么时候使用内联函数
什么是内联函数:
以inline修饰的函数叫做内联函数,当C++编译器发现在某个地方调用内联函数时,不会去调用这个函数,而是在调用这个函数的地方展开这个函数。
inline int max(a,b)
{
return a>b ? a:b;
} //展开后成为 a>b?a:b
使用内联函数的好处与缺点:
好处 :没有函数压栈的开销,提升了程序运行的效率。是一种以空间换时间的做法。
通过将函数声明为内联,可以把函数定义放在头文件内。
缺点:
因为代码的扩展,内联函数增大了可执行程序的体积。
C++内联函数的展开是中编译阶段,这就意味着如果内联函数发生了改动,那么就需要重新编译代码。
将内联函数放入头文件,会使头文件信息变多。
在嵌入式系统中,嵌入式系统的存储约束不允许体积很大的可执行程序,此时使用内联函数不被欢迎。
C++对内联函数的限制:
1.代码很长或者有循环/递归的函数不宜使用内联函数
2.不能存在过多的条件语句
3.声明内联函数必须要在第一个使用内联函数之前。
4.inline必须和函数定义放在一起,才能成为内联函数;否则仅将inline 放在声明前是不起作用的,会被忽略。
5.定义在类内的成员函数默认定义为内联函数。
6.inline是向请求在调用该函数的时候进行函数替换,编译器可能拒绝内联请求。
7.不能对内联函数进行取地址操作。
内联函数与宏
替换在C中可以使用宏,但C++建议使用内联去替代宏
宏的优点:
1.增强代码的复用性。
2.提高性能
宏也有甚多缺点:
1.不方便调试宏。(因为预编译阶段进行了替换)
2.导致代码可读性差,可维护性差,容易误用。
3.没有类型安全的检查。
宏与内联函数:
1.使用宏代码最大的缺点是容易出错,预处理器在拷贝宏代码时常常产生意想不到的边际效应。
2.宏的另一个缺点是不可以调试,但是内联函数可以调试。
3.对于C++而言,宏的另一个缺点:无法操作类的私有数据成员。
4.内联函数另一个优点就是:函数被内联后,编译器就可以通过上下文相关的优化技术对结果代码执行更深入的优化。
什么时候使用内联函数:
1.当对程序执行性能有要求时,那么就使用内联函数。
2.当想用宏定义一个函数时,就是用内联函数。