1.内联函数和宏相比,可以调试,宏不行。
2.和函数相比,编译以后,直接内嵌在主函数里,不用走调用函数,保存环境的流程。因而省去函数调用开销。
3.内联函数和宏相比,不是简单的代码块替换,减少一些安全隐患:例如:
// 返回 i 的绝对值的宏
#define unsafe(i) \
( (i) >= 0 ? (i) : -(i) )
// 返回 i 的绝对值的内联函数
inline
int safe(int i)
{
return i >= 0 ? i : -i;
}
int f();
void userCode(int x)
{
int ans;
ans = unsafe(x++); // 错误!x 被增加两次
ans = unsafe(f()); // 危险!f()被调用两次
ans = safe(x++); // 正确! x 被增加一次
ans = safe(f()); // 正确! f() 被调用一次
}
可以进一步研究的问题:内联的缺点有哪些?
(2012-09-18)