C++之内联函数

  • Post author:
  • Post category:其他



一、C++内联函数


inline,翻译成“内联”或“内嵌”。它意思是说:意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置.它是为了

解决多次函数调用的效率问题



那什么叫内联函数呢?内联函数通常指那些定义在类体内的成员函数,即该函数的函数体放在类体内。


二、如何定义内联函数


1.将函数的定义写在类定义体的内部。

2.将类定义体内部的函数声明上用inline显示指定。

3.在类定义体外部的函数定义上使用inline显示指定。


三、什么时候用内联函数


先看一个代码例子:

#include<iostream>
using namespace std;
void myPrintf(int a)  
{  
    cout<<a;  
}  

int main()  
{  
    for(int i=0;i<100;i++)  
        myPrintf(2);  
}  

对于这个函数,在进行反复的打印2的过程中我们是要反复的调用myPrintf(int a)这个函数,而进函数和出函数是需要时间的,100次的循环,这样可能影响工作效率(当然这个例子算小)。

所以,我们就想要如何去免除进出函数的过程呢?那么我们就可以声明inline这个关键字,当我们声明了一个inline的函数时候,函数被调用的语句就被替换成了函数本身,进行了一个预处理。


tip:


1.内联函数可减少cpu的系统开销,并且程序的整体速度将加快,但当内联函数很大时,会有相反的作用,因此一般比较小的函数才使用内联函数.

2.有两种内联函数的声明方法,一种是在函数前使用inline关键字,另一种是在类的内部定义函数的代码,这样的函数将自动转换为内联函数,而且没必要将inline放在函数前面.

3.内联是一种对编译器的请求,下面这些情况会阻止编译器服从这项请求.

如果函数中包含有循环,switch或goto语句,递归函数,含有static的函数.

// 头文件  
class A  
{  
    public:  
    void Foo(int x, int y);  //void 之前可以加inline,加不加都可以
}  
// 定义文件  
inline void A::Foo(int x, int y){}

内联函数必须是和函数体在一起,才有效。像这样的申明Inline Tablefunction(int I)是没有效果的,编译器只是把函数作为普通的函数申明,我们必须定义函数体。

Inline tablefunction(int I) {return I*I};

这样我们才算定义了一个内联函数。我们可以把它作为一般的函数一样调用。但是执行速度确比一般函数的执行速度要快。

Class TableClass{
 Private:
  Int I,j;
 Public: 
  Int add() { return I+j;};
  Inline int dec() { return I-j;}
  Int GetNum();
}
inline int tableclass::GetNum(){
return I;
}

上面申明的三个函数都是内联函数。在C++中,在类的内部定义了函数体的函数,被默认为是内联函数。而不管你是否有inline关键字。



版权声明:本文为lxjstudyIT原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。