c++ 内联函数inline

来源:互联网 发布:mac英英词典 编辑:程序博客网 时间:2024/06/01 09:27

1. inline原理

        在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替代。采用空间换时间的策略。是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。

例如:

         如果一个函数被指定为inline函数,则它将在程序中每个调用点上被展开。

         int i=10;

         int j=100;

         inline int min(int i,int j){ return i < j ?  i : j; } 

         int min = min(i,j);在编译时被展开为 int min = i < j ? i : j;

函数的额外执行开销被消除,函数体所需存储内存资源增加。

2. 内联函数inline的使用

        隐式inline在类里定义函数,显式的则是在函数前加上inline关键字。

3. 注意事项

       如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。所以,

如果函数体代码过长或者函数体重有循环语句,if语句或switch语句或递归时,不宜用内联。

       关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline放在函数声明前面不起任何作用。

内联函数调用前必须声明。

      inline 是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。

      只在定义前加上inline,而不是在声明和定义前都加,因为这能体现高质量C++/C程序设计风格的一个基本原则:声明与定义不可混为一谈。

例如:

       class A
      {
       public:
             void Foo(int x, int y);
      }
     // 定义文件
     inline void A::Foo(int x, int y){}

4. 总结

    可以将内联理解为C++中对于函数专有的宏,对于C的函数宏的一种改进。

对于常量宏,C++提供const替代;而对于函数宏,C++提供的方案则是inline。

通过内联机制,既具备宏代码的效率,又增加了安全性,还可以自由操作类的数据成员,算是一个比较完美的解决方案。