constexpr
关键字,用来定义常量表达式,用此关键字修饰的函数可以在程序编译阶段运行。- 执行该初始化任务时,编译器把对constexpr函数的调用替换成其结果值,为了能在编译过程中随时展开,constexpr函数被隐式地指定为内联函数。
- constexpr函数体内也可以有其他语句,但是这些语句必须保证在运行时不执行任何操作。例如:空语句,类型别名,以及using声明。
inline
是修饰内联函数的,从而提高程序调用简单函数的速度,在编译器编译的时候就可以替换对应的编译表达式- 需要注意的是,
inline
函数中不能包含if
,switch
等分支语句,也不能进行异常接口声明 inline
对于编译器来说只是一个建议,编译器可以选择忽略这个。- 一般来说,内联机制适用于优化小的、只有几行的而且经常被调用的函数。大多数的编译器都不支持递归函数的内联
- 需要注意的是,
- 内联函数和
constexpr
函数应该在头文件中定义,这一点不同于其他函数。毕竟编译器能够在调用点展开该函数的代码。此时,仅有函数原型是不够的。