08 April 2022

C++ 核心指南目录

F.5: If a function is very small and time-critical, declare it inline

理由

不能依靠编译器去优化内联函数。40 年前我们承诺编译器比人类优化的更好。但是直到现在,我们还在等待更好的优化机制。手动地把类内部的成员函数标注成 inline 可以让编译器优化的更好。

例子

inline string cat(const string& s, const string& s2) { return s + s2; }

例外

不要把内联函数放在还没稳定的接口。内联函数是 ABI 的一部分。

注意

constexpr 默认是 inline

注意

类的定义声明中的成员函数默认为 inline 内联的。

例外

函数模板(包括类模板的成员函数A<T>::function()以及成员函数模板A::function<T>()一般定义在头文件中,所以是 inline 函数。

强化

超过 3 个语句的函数,如果声明为 inline 的需要注意下。可能还是不要声明为 inline 比较好。