菜鸟进化史

1.inline函数背后的整体观念是,将“对此函数的每一个调用”都以函数本体替换之。inline在大多数C++程序中是编译期行为,所以inline函数通常一定被置于头文件内,因为在编译过程中进行inlining,,讲一个函数调用替换为被调用函数的本体,编译器必须知道那个函数长什么样子。记住,inline只是对编译器的一个申请,不是强制命令。大部分编译器拒绝将太过复杂的(带有循环和递归)的函数inline,而所有virtual也不适合声明为inline,因为virtual意味着”等待,直到运行期才确定调用哪个函数“,而inline意味着”执行前,先将调用动作替换为被调用函数的本体“。

一个表面上看似inline的函数是否真是inline,主要取决于编译器。幸运的是大多数编译器提供了一个诊断级别:如果它们无法将你要求的函数inline化,会给你一个警告信息。

2.构造函数和析构函数往往不适合inline。

3.大多数调试器面对inline函数都束手无策,毕竟你不能在一个并不存在的函数内设立断点!

4.使用inline的原则:

(1)将大多数inlining限制在小型、被频繁调用的函数身上。这可使日后的调试过程和二进制升级更容易,也可使潜在的代码膨胀问题最小化,是程序的速度提升机会最大化。

(2)不要只因为function templates出现在头文件,就将它们声明为inline。

5.inline函数和普通函数的区别:

函数声明前加上inline表示该函数在编译处展开,也就是说无需像没有inline限制的函数一样,在执行时必须到函数定义处执行,这样需要一个地址指针,而且执行时需要跳跃。有了inline后在编译时即可执行,这样缩短了程序执行时间,不过需要更多的空间。inline主要应用在函数体比较小,使用比较频繁的函数。一般这种函数的代码不会超过几行吧!还有如果函数被指定为inline,一般说来函数不可被重载。还有如果在类的申明同时已经在类体中定义好了函数,则这函数默认是inline型!



上帝助自助者。

菜鸟进化史

相关文章:

你感兴趣的文章:

标签云: