内联函数的讲授

内联函数的讲解
一、什么叫inline函数? 
inline(小心,不是online),翻译成“内联”或“内嵌”。使用来替代“宏“的
意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置。
好处:省去了调用的过程,加快程序运行速度。(函数的调用过程,由于有前面所说的参数入栈等操作,所以总要多占用一些时间)。
不好处:由于每当代码调用到内联函数,就需要在调用处直接插入一段该函数的代码,所以程序的体积将增大。


生活实例:
拿生活现象比喻,就像电视坏了,通过电话找修理工来,你会嫌慢,于是干脆在家里养了一个修理工。这样当然是快了,不过,修理工住在你家可就要占地儿了。内联函数并不是必须的,它只是为了提高速度而进行的一种修饰。要修饰一个函数为内联型,使用如下格式: 
inline 函数的声明或定义 
简单一句话,在函数声明或定义前加一个 inline 修饰符。 
inline int max(int a, int b) 

   return (a>b)? a : b; 
}




二、inline函数的规则以及注意事项


(1)、(递归不可)含有递归调用的函数不能设置为inline;


(2)、(程序复杂不可)使用了复杂流程控制语句:循环语句和switch语句,无法设置为inline;


(3)、(程序应小) 由于inline增加体积的特性,所以建议inline函数内的代码应很短小。最好不超过5行。


(4)、(特殊情况的转换显示警告)inline仅做为一种“请求”,特定的情况下,编译器将不理会inline关键字,而强制让函数成为普通函数。出现这种情况,编译器会给出警告消息。


(5)、(程序的执行顺序)在你调用一个内联函数之前,这个函数一定要在之前有声明或已定义为inline,否则没有被调用。


如下面代码片段: 
//函数一开始没有被声明为inline: 
void foo(); 
//然后就有代码调用它: 
foo(); 
//在调用后才有定义函数为inline: 
inline void foo() 

   ...... 

代码是的foo()函数最终没有实现inline;


(6)、为了调试方便,在程序处于调试阶段时,所有内联函数都不被实现。


(7)、在一个文件中定义的内联函数不能在另一个文件中使用。它们通常放在头文件*享。 
参考网址:


上面是在c++中,而在javascript中将会如何呢?
下面简单介绍:


一般的javascript函数:
<script>
function init () {
alert(”I am saying something important.“);
}
window.onload() = init;
</script>
上面是普通的函数,将其赋值给onload()事件,一充当该事件的处理,但我们可以使用内联函数,这样可以避免专门对函数的的定义:
eg:
<script>
window.onload = function()
{
alert(”I am saying something important.“);
}
</script>
优势:直接特定的作用域内引用(局部)变量,而不必要将这个函数作为参数传递给这个函数。


http://blog.csdn.net/forarrow/article/details/6394931

版权声明:本文为博主原创文章,未经博主允许不得转载。