内联函数

 

在函数声明或定义时,将inline关键字加在函数返回类型前面的就是内联函数。

例1:

 

View Code
 1 #include<iostream>
 2 using namespace std;
 3 inline int max(int a,int b){
 4     return a>b?a:b;
 5 }
 6 int main()
 7 {
 8     int x1=max(3,4);
 9     int x2=max(7,2);
10     int x3=max(x1,x2);
11     cout<<x1<<' '<<x2<<' '<<x3<<endl;
12     return 0;
13 }

 

内联函数的声明,定义和调用方法与普通函数相同,但C++对它们的处理方式不一样。

如果一个函数被定义为内联函数,在编译时,C++将用内联函数的代码替换对它的每次调用。上面的main函数多次调用的函数max(),C++在编译时会将main函数中的函数调用替换成如下形式:

例2:

View Code
 1 #include<iostream>
 2 using namespace std;
 3 inline int max(int a,int b){
 4     return a>b?a:b;
 5 }
 6 int main()
 7 {
 8     int x1=3>4?3:4;
 9     int x2=7>2?7:2;
10     int x3=x1>x2?x1:x2;
11     cout<<x1<<' '<<x2<<' '<<x3<<endl;
12     return 0;
13 }

内联函数不需要建立函数调用时的运行环境,不需要进行参数传递,也不需要执行指令在主程序和函数指令之间进行转移,所以内联函数执行时间更快。当然,由于每次在调用内联函数时,都会插入它的函数代码,所以它会是程序代码增加,占用更多的内存空间。

说明:

1.内联函数的声明或定义必须在函数的调用之前完成。

例3:

View Code
1 inline int min(int a,int b);//声明min是内联函数
2 void main(){
3     int x=min(23,78);
4 }
5 int min(int a,int b)//可以再本行的最左端加上inline,这里虽省略了,但意义相同
6 {
7     return a<b?a:b;
8 }

在本例中,min函数并未冠以inline关键字(main函数后面的min()是定义),但它仍是内联函数。但下面的例子中的min()就不是内联函数,在函数定义中的内联函数无效。

例4:

View Code
1 inline int min(int a,int b);//声明min是普通函数
2 void main(){
3     int x=min(23,78);
4 }
5 int min(int a,int b)//尽管有inline关键字,但min是个普通函数
6 {
7     return a<b?a:b;
8 }

虽然在最后的函数min()定义时指定它为内联函数,但在main中调用min()时,编译器只能够根据声明确定min()是个普通函数。

2.一般而言只有几行代码的(最好只有1——5行),经常被调用的简单函数才适宜作为内联函数。以下3种函数不能作为内联函数:递归函数,函数体内含有循环,switch,goto语句之类的复杂结构的函数,具有较多代码的大函数。

 

 

 

 

 

 

 

posted on 2012-10-23 22:19  Acmer_Roney  阅读(376)  评论(0编辑  收藏  举报

导航