inline函数讲解

来源:互联网 发布:tomcat运行php 编辑:程序博客网 时间:2024/06/05 19:32

什么是inline函数:

        inline函数是在编译时进行内联代码的替换,类似于宏,但与宏不同,inline函数节省了函数调用时地址切换所用的时间!由于inline函数是直接将函数调用为替换内联代码,所以增加了内存的消耗,(如果有10处存在该函数调用,那么将存在10处内联代码,这样便增加了内存的消耗)。

1,常规的内联函数实现:

           inline int f(int x);

          inline int f(int x){***************}                //将函数声明和定义都添上inline

或者:inline int f(int x){*************}          //直接将含有inline的定义替换掉上面的两行代码

2,类的内联函数:

        class a

     {

         public: 

                int f(int x) {************}             //f(x)自动变为类内联函数

      }

或者:class a

        {

       public:

                   int f(int x);

         }

      inline  int a::f(int x)   {********************}    //这种实现中,内联方法的声明和实现必须在一个文件中,


不可以这样写:class a 

                            {public:         

                                  inline int f(int x);

                           }       //声明在.h文件中

                           inline int f(int x)  {***********}   // 实现在.cpp文件中 

出现这种原因是由于内联函数是内部链接性,在调用函数的文件里必须包含内联函数的定义,即内敛函数的定义必须对编译器是可见的,以便编译器能够在调用点内展开该函数的内联代码,此时,若仅有函数原型是不行的。所以类声明的头文件必须包含内联实现。(或者将内联实现写在另一个头文件中,然后调用函数的文件中包含这两个头文件)




注意:由于内联函数是内部链接性,所以可以把定义放在头文件中,但最好不要把普通的函数定义,或者普通类方法定义放在头文件中,这样容易造成多重定义(比如一个程序的两个文件同时包含该头文件)普通的函数或类方法的链接性是外部的,便违背了单定义原则!

0 0
原创粉丝点击