inline关键字
编译器优化提示
建议编译器将函数体直接内联展开到调用点,避免传统函数调用的开销(如压栈、跳转、返回等),提升运行效率。
-
inline
仅是建议,编译器可能忽略(如函数体复杂、递归函数等)。 -
适合短小且频繁调用的函数。
-
过度使用可能导致代码膨胀,影响缓存性能。
解决多定义问题
在头文件中定义函数时,若多个源文件包含该头文件,普通函数会导致重复定义链接错误。使用 inline
修饰函数,允许在多个编译单元中存在相同定义,链接时合并为一个。
注意事项
模板与类成员函数:
-
类内定义的成员函数(包括模板)隐式内联。
-
模板函数通常需在头文件定义,无需显式
inline
。
与宏的区别:
-
宏在预处理阶段展开,无类型检查;内联函数在编译时处理,类型安全且可调试。
C++17 的 inline
变量:
-
允许头文件中定义变量(如
inline static
类成员),避免重复定义问题。