C++_07_内联函数(inline)

内联函数(inline)

  在c++语言中可以使用
         const int A = 3; 
  代替  #define  A  3;       可以做到变量的替换,但是如果是需要体寒更大的函数呢?

C++中使用inline关键字声明内联函数,使用内联函数替代代码片段,达到相似的效果!
注意:内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。(先声明后定义)
C++编译器可以将一个函数进行内联编译,被C++编译器内联编译的函数叫做内联函数

#include <iostream>
using namespace std;

//inline void printA();
//inline int myfunc(int a, int b)和函数体的实现,写在一块

inline void printA()  //内联函数
{
    int a = 10;
    cout<<"a = "<<a<<endl;
}

void printB()    //普通函数
{
    int b = 10;
    cout<<"b = "<<b<<endl;
}


int main()
{
    printA();    //内联函数调用,完全宏文本替换,编译器操作
    //2 C++编译器直接将函数体插入在函数调用的地方
    //3 内联函数省去了普通函数调用时压栈,跳转和返回的开销 
    //会占用较大代码段空间,但反应速度快啊
//     {
//         int a = 10;
//         cout<<"a = "<<a<<endl;
//     }
    printB();    //普通函数调用,每次调用都有压栈、跳转、返回开销
    cout<<"hello..."<<endl;
    system("pause");
    return 0;
}

深入理解:

    1、内联函数不需要声明时加inline, 但一定要在定义的时候加inline,inline关键字一定要和函数体紧密联系关联
    2、内联函数是纯文本替换,是编译器完成的,和宏定义在预处理的文本替换不一样,这个过程叫内联编译
    3、内联函数在最终生成的编译文件中是没有定义和意义的,他只在编写代码到编译代码期间有意义,因为一旦编译,生成的文件都是一样的编码符号;
    4、内联函数会增大代码段所占的数量,占用更大的内存资源,内联函数不需要承担函数调用时的压栈、跳转、返回的时间和资源开销(本质而言:用更大资源(主要内存)开销来换取更快的执行效率,等待浪费的时间少了嘛),所以一般短小精悍的函数代码片段建议使用内联
    5、内联inline关键字是对编译器采用内联编译的请求,编译器有可能拒绝或忽略,一旦拒绝或忽,内联函数就变成普通函数编译
    6、C++比较智能,在某些情况下即便你没加inline关键字采用内联函数,但编译器也会视情况采用内联(优化)编译
    7、C++内联函数的限制:不允许存在循环语句,不能存在过多的条件编译语句,函数体不能态过于庞大,还不能对内联还是哪壶进行取址操作
    8、内联函数最大的意义就是省去压栈、调用、返回时的开销,当函数体的执行效率远大于压栈、调用、返回时的开销时,内联函数将失去意义

处理一条语句使用内联函数和宏定义替换区别:
    1、使用内联函数是将语句封装为函数,宏定义替换不需要函数
    2、不涉及运算,只是文本打印的话,两者效果几乎差不多
    3、一旦涉及运算,内联函数是做好封装的,运算顺序已经完整规划排序完成,而宏定义替换只是替换文本,没有经历系统完整的运算顺序的规划,有一定的异变性

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值