关于内敛函数

普通内联函数
当我们定义了一个函数,编译器就会在内存中为其创建一个指令集,当我们调用这个函数时,程序就会跳转到该指令集处。当该函数运行完毕后,程序又会返回到原来执行调用该函数语句的下一行继续执行。假如对该函数执行了上百次调用,那么就要来回跳转上百次,


这会严重影响到程序的执行效率。
C++中,为解决这一问题,可以使用关键字inline声明函数。如:
inline int func();
则编译器将不会创建真正的函数,而是将这个内联函数的所有代码复制到调用函数中,这样程序在执行调用该函数时就不需要来回跳转,自然就提高了程序运行时的效率。
使用内联函数在提高效率时,会需多用一些代码,比如说程序调用了内联函数100次,那么就要将该内联函数中的代码复制100次,这样会增大程序的体积。
假如函数很小,那么即使多次复制也不会增加许多体积,这时使用内联函数比较合适。如: 
#include <iostream>
using namespace std;
inline int func(int);  //使用inlie将带有一个int变量并返回int值的函数func说明为内联函数
int _tmain(int argc, _TCHAR* argv[])
{
 int x;
 cout<<"请输入一个数字\n";
 cin>>x;  //将用户输入的数字保存在x变量中
 cout<<"\n";
 cout<<"输入的数字为:"<<func(x)<<endl;
 
 system("pause");
 return 0;
}
int func(int x)  //函数定义
{
 return x;    //函数体
}       
输出: 
请输入一个数字
1
输入的数字为:1
---------------------------------------------------------
分析:
    在程序的第3行声明了一个内联函数func,它有一个整形变量int,并且返回一个整数。
    在第10行则调用了这个函数
    cout<<"输入的数字为:"<<func(x)<<endl;
    该行语句等于:
    cout<<"输入的数字为:"<<x<<endl;
    在编译该程序时就会自动将上面第1行语句替换为第2行,因此在执行该程序时就会节省了一次跳转。
    注意:在不知道具体怎么操作时,最好先不要使用内联函数,等完成程序的大部分功能时,再对符合要求的函数进行内联操作。
    成员内联函数
    
    我们也可以将成员函数说明为内联函数,如:
    #include <iostream>
using namespace std;
class A
{
public:
  inline void func(int,int);//将成员函数func()声明为内联函数
 inline void print();     //将成员函数print()声明为内联函数
private:
 int i,j;
};
int _tmain(int argc, _TCHAR* argv[])
{
 A a;
 a.func(5,2);
 a.print();
 system("pause");
 return 0;
}
void A::func(int x, int y){i=x;j=y;}//func定义部分
void A::print(){cout<<"两数相乘为:"<<i*j<<endl;}//print定义部分
输出:
    两数相乘为:10
分析:
    程序的第6-7行将类A的成员函数func和print声明为内联函数,第14-15行则调用了这两个函数。由于这两个函数是内联函数,因此在编译时,函数体中的代码都已分别写到了第14行和第15行。
    我们也可以将成员函数的定义部分放到该类的声明中,也就是说将声明和定义合并在一起。
    如:
    void func(int x,int y){i=x;j=y;}
    这样该函数就会自动成为内联函数。我们用该方法对上面的程序进行修改如下:
    #include <iostream>
using namespace std;
class A
{
public:
 inline void func(int x,int y){i=x;j=y;}               //成员函数func()是内联函数
 inline void print(){cout<<"两数相乘为:"<<i*j<<endl;}    //成员函数print()是内联函数
private:
 int i,j;
};
int _tmain(int argc, _TCHAR* argv[])
{
 A a;
 a.func(5,2);  //调用func(5,2)内联函数等于直接将i=5,j=2写在这里
 a.print();    //调用print()内联函数等于将{cout<<"两数相乘为:"<<i*j<<endl;}直接写到该行
 system("pause");
 return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值