C++重新认知:inline关键字

一、为什么要使用inline关键字

在C++中.,为了解决频繁调用小函数造成大量消耗栈空间的问题,引进了inline关键字,inline修饰的函数为内敛函数(频繁大量的使用栈空间会造成栈溢出)。

C++重新认知:inline关键字_第1张图片
在这段代码中,每次执行for循环 ,for循环内部的test()函数会替换成内敛函数的内容,这样就防止每次执行test()函数都会重新开辟栈内存空间造成的消耗。

二、inline关键字的限制

- 内联函数中不能包括复杂结构控制语句例如while、switch语句等,自身函数也不能是递归函数,即内联函数代码中包括调用自身函数。

- 虚函数要阻止内敛函数的进行
因为虚函数是先声明在运行期间才确定调用哪一个具体的函数,而内敛函数是在编译过程中加进去的,如果没有阻止进行,内敛函数就无法知道具体的虚函数。

三、内敛函数的规范用法

  • 内敛函数要放在头文件中
    每次.cpp文件运行编译时需要将内敛函数进行编译,如果没有在头文件中或者没有在.cpp文件内定义内敛函数,那么代码在运行时实际上是非内敛调用,因为没有将内敛函数包含进来。

  • 内敛函数的声明和定义要一致

  • inline关键字只有和函数的定义体在一起才起作用,如果和声明部分在一起不会起内敛作用。
    C++重新认知:inline关键字_第2张图片
    testa()是起不到内敛作用的,而testb()是内敛函数。

四、内联函数的声明

  • 隐喻式
    如果在类内声明成员函数都是内敛的
    C++重新认知:inline关键字_第3张图片

  • 明确声明
    在函数前面加上inline关键字

五、不适宜使用内敛函数的情况

  • 内敛函数的代码过长,会造成内存开销过大
  • 内敛函数中有循环结构,内敛过程的时间开销比调用此函数的开销大
  • 类的构造函数和析构函数会误解我们效率高(当我们把子类的构造函数或者是析构函数添加到类的结构中时,他们在执行时会调用基类的构造函数或析构函数,所以不要轻易将构造函数和析构函数添加到类成员中)

你可能感兴趣的:(C++重新认知系列,c++,开发语言)