一、为什么要使用inline关键字
在C++中.,为了解决频繁调用小函数造成大量消耗栈空间的问题,引进了inline关键字,inline修饰的函数为内敛函数(频繁大量的使用栈空间会造成栈溢出)。
在这段代码中,每次执行for循环 ,for循环内部的test()函数会替换成内敛函数的内容,这样就防止每次执行test()函数都会重新开辟栈内存空间造成的消耗。
二、inline关键字的限制
- 内联函数中不能包括复杂结构控制语句例如while、switch语句等,自身函数也不能是递归函数,即内联函数代码中包括调用自身函数。
- 虚函数要阻止内敛函数的进行
因为虚函数是先声明在运行期间才确定调用哪一个具体的函数,而内敛函数是在编译过程中加进去的,如果没有阻止进行,内敛函数就无法知道具体的虚函数。
三、内敛函数的规范用法
-
内敛函数要放在头文件中
每次.cpp文件运行编译时需要将内敛函数进行编译,如果没有在头文件中或者没有在.cpp文件内定义内敛函数,那么代码在运行时实际上是非内敛调用,因为没有将内敛函数包含进来。 -
内敛函数的声明和定义要一致
-
inline关键字只有和函数的定义体在一起才起作用,如果和声明部分在一起不会起内敛作用。
testa()是起不到内敛作用的,而testb()是内敛函数。
四、内联函数的声明
-
隐喻式
如果在类内声明成员函数都是内敛的
-
明确声明
在函数前面加上inline关键字
五、不适宜使用内敛函数的情况
- 内敛函数的代码过长,会造成内存开销过大
- 内敛函数中有循环结构,内敛过程的时间开销比调用此函数的开销大
- 类的构造函数和析构函数会误解我们效率高(当我们把子类的构造函数或者是析构函数添加到类的结构中时,他们在执行时会调用基类的构造函数或析构函数,所以不要轻易将构造函数和析构函数添加到类成员中)