当前位置:   article > 正文

C++_07_内联函数(inline)_内联函数inline写在哪里

内联函数inline写在哪里

内联函数(inline)

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

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

  1. #include <iostream>
  2. using namespace std;
  3. //inline void printA();
  4. //inline int myfunc(int a, int b)和函数体的实现,写在一块
  5. inline void printA() //内联函数
  6. {
  7. int a = 10;
  8. cout<<"a = "<<a<<endl;
  9. }
  10. void printB() //普通函数
  11. {
  12. int b = 10;
  13. cout<<"b = "<<b<<endl;
  14. }
  15. int main()
  16. {
  17. printA(); //内联函数调用,完全宏文本替换,编译器操作
  18. //2 C++编译器直接将函数体插入在函数调用的地方
  19. //3 内联函数省去了普通函数调用时压栈,跳转和返回的开销
  20. //会占用较大代码段空间,但反应速度快啊
  21. // {
  22. // int a = 10;
  23. // cout<<"a = "<<a<<endl;
  24. // }
  25. printB(); //普通函数调用,每次调用都有压栈、跳转、返回开销
  26. cout<<"hello..."<<endl;
  27. system("pause");
  28. return 0;
  29. }

深入理解:

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

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号