内联函数的定义:内联函数可以避免函数调用时的开销,内联函数是将函数返回值的类型前面加上inline关键字,这样就可以声明一个内联函数。
优点:调用函数一般比求等价表达式的值要慢一些。一次函数调用其实包含着一系列工作:调用前要先保存寄存器,并在返回时恢复;可能需要拷贝实参;程序转向一个新的位置继续执行。
内联函数可避免函数调用时的开销,将函数指定为内联函数,通常就是将它在每个调用点上“内联地”展开。
内联声明只是向编译器发出的一个请求,编译器可以选择忽略这个请求。
内联机制用于优化规模较小、流程直接、频繁调用的函数。很多编译器不支持内联递归函数。
constexpr:
常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。
constexpr变量:允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。
而const对象中,用常量去初始化非常量或者用非常量去初始化常量都是可以的。
int i= 42;
const int ci = i;//正确,i的值被拷贝给了ci
int j = ci;//正确:ci的值被拷贝给了j
constexpr int mf = 20;//20是常量表达式
consrexpr int limit = mf+1;//mf+1是常量表达式
constexpr int sz = size();//只有当size是一个constexpr函数时才是一条正确的声明语句
constexpr函数:能用于常量表达式的函数。定义constexpr函数的方法的约定:函数的返回类型及所有形参的类型都得是字面值类型(算术类型、引用、指针,自定义类、IO库、string类型不属于字面值类型),而且函数体中必须有且只有一条return语句。为了能在编译过程中随时展开,constexpr函数被隐式地指定为内联函数。
允许constexpr函数不一定返回常量表达式。
内联函数和constexpr函数放在头文件内
和其他的函数不一样,内联函数和constexpr函数可以在程序中多次定义。但是它的多个定义必须是一致的。