一、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关键字。