08 April 2022

C++ 核心指南目录

理由:

不能依靠编译器优化内联。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 的。