宏定义和内联函数的区别:
第一:宏定义时在预处理阶段进行代码替换,而内联函数在编译阶段进行代码替换。
第二:宏定义没有类型检查,而内联函数有类型检查。
内联函数和普通函数最大的区别是在内部实现方面上:
普通函数在被调用时,系统首先要跳跃到该函数的入口地址,执行函数体,执行完成后,再返回到函数调用的地方,函数始终只有一个复制;而内联函数则不需要一个寻址过程,当执行到内联函数时,内联函数像宏一样展开,如果在N处调用了内联函数,则此函数就会有N个代码段的复制。编译器会在内联函数调用的地方,将内联函数的内容展开,避免了函数调用的开销,又没有宏机制的缺陷。执行速度比一般的函数执行速度要快。
内联函数本身不能直接调用递归函数。只适合函数体内简单代码的使用。
任何在类的说明部分定义的函数都会被自动的认为是内联函数。内联函数必须是函数体声明在一起,才有效。像这样的的声明 Inline Function(int i)是没有效果的,编译器只是把函数作为普通函数的声明,我们必须定义函数体。
内联函数的调用必须出现在第一次被调用之前。
在类的内部定义了函数体的函数,被默认是内联函数,而不管是否有inline关键字修饰。
内联函数也有一定的局限性,如果函数体过大,编译器会放弃内联方式,而采用普通的方式调用函数。内联函数是以增加空间的消耗为代价的,是否需要inline函数就需要根据实际情况取舍。
inline一般只用于如下情况:
1) 一个函数不断被重复调用。
2)函数只有简单的几行,且函数不包含for、while、switch语句。