如何在C++中实现内联函数?

时间:2020-02-23 14:29:59  来源:igfitidea点击:

在本文中,我们将揭开C++中内联函数提供的一个非常强大的函数。

内联函数在C++中的用法

在我们传统的编译系统(执行系统)中,每当编译器遇到函数调用语句时,它通常将内存地址存储在某个指定位置,然后执行将其控制权转移到实际功能块。

执行完函数后,函数返回的值将存储在某个寄存器中,最终,控件又被转移到函数调用语句中。

我们可以感觉到,这实际上是一个繁琐而漫长的过程,可能会花费一些时间,从而增加了程序的时间复杂度。
此外,在某些小型函数中,有时将函数调用转移到实际功能块所花费的时间甚至超过实际执行时间。

这是内联函数出现的时候。

内联函数将功能调用替换为功能块,即它们将功能代码扩展为功能调用。
因此,它减少了编译器调用函数的开销。

创建内联函数

如上所述,内联函数减少了编译器调用和执行整个功能块所需的时间。

当编译器遇到内联函数时,它将替换该函数,并将该函数调用替换为要执行的功能块。

语法:

inline return_type function(argument list)
{
  //Body
}  

例:

#include <iostream> 
using namespace std; 
inline int multiply(int item1, int item2) 
{ 
	int res =  item1*item2;
	return res;
} 
int main() 
{ 
int a,b;
cout<<"Enter the elements:"<<endl;
cin>>a;
cin>>b;
int opt=multiply(a,b);
cout<<"Result: "<<opt;
}  

输出:

Enter the elements:
10
20
Result: 200

C++中的类中的内联函数

内联函数可以合并到一个类中,并且仍然可以实现相同的功能。
通常,在类内部声明的所有函数自动表现为内联函数,即它们是隐式内联的。

语法:

class class-name 
{ 
public: 
  function declaration 
}; 

function definition
{ 

}

例:

#include <iostream> 
using namespace std; 
class Evaluate
{ 
public: 
  int multiply(int x,int y);
};
inline int Evaluate::multiply(int item1, int item2) 
{ 
	int res =  item1*item2;
	return res;
} 
int main() 
{ 
int a,b;
cout<<"Enter the elements:"<<endl;
cin>>a;
cin>>b;
Evaluate ev;

int opt=ev.multiply(a,b);
cout<<"Result: "<<opt;
}  

输出:

Enter the elements:
10
20
Result: 200

内联函数的优点

  • 内联函数减少了编译时函数调用的开销。

  • 它减少了将调用转移到函数和执行函数所需的时间。

  • 它消除了在程序执行后将控件转移到函数调用所需的时间。

  • 此功能主要用于加快程序速度,即使几秒钟都很重要。

内联函数的局限性

  • 内联函数不能用于比较大的一组函数。

  • 此外,内联函数不适用于递归函数,循环等。

  • 编译器决定是否应内联函数。
    添加" inline"关键字不能保证该函数将被内联