理解:内联函数不需要承担函数调用的开销,这点相对于宏来说更好。但在使用时还是需要注意:
- 内联函数会增加整个代码的体积,造成的代码膨胀可能会导致不合理的页面调度行为(即系统颠簸)
- 函数体过多会降低指令高速缓存的命中率,使取指令速度降低。但如果内联函数非常短,生成代码比函数调用生成的少得多,此时就可以带来更小的目标代码,更高的缓存命中率。
- 内联只是提醒可能会被忽略
拒绝使用内联的情况
- 内联复杂的函数(如含递归或循环的函数)
- 简单的虚函数调用【因为虚函数需要等到运行时才能决定调用那个函数,而内联函数在编译期间就将调用处的被调用函数替代】
- 不可用于构造、析构。
被外联的内联
在一个头文件中定义一个内联函数,若在源文件中使用,则为被外联的内联。若两个源文件中都使用了这个头文件、函数编译器报错,可在源文件中将被外联的内联函数声明为static函数。