内联函数和constexpr函数

来源:互联网 发布:淘宝几百块的电脑主机 编辑:程序博客网 时间:2024/05/16 15:46

内联函数和constexpr函数

----雨竹清风

内联函数

内联函数可以避免函数调用时的开销。内联函数是将函数的返回值的类型前面加上关键字inline,这样就可以声明为一个内联函数了。

一般函数的调用开销较大,需要先保存寄存器中,返回时恢复,并且可能需要拷贝实参;程序将会转向一个新的位置进行执行。而内联函数仅仅是在编译的过程展开(替换)即可。

内联函数一般是用于规模较小的,流程直接,频繁调用的函数。最好不要有递归。

constexpr函数

constexpr函数是指能用于常量表达式的函数。函数的返回值类型以及所有的形参的类型必须是字面值(算数类型,引用,指针)类型,而且函数中必须只有一条return语句。

constexpr函数在编译的过程中被隐式的指定为内联函数。

constexpr函数的返回值并非是一个常量:

例如:

constexpr size_t scale(size_t cnt){return new_sz() * cnt;}

当形参cnt传递过来的是一个常量时,scale函数才会返回一个常量表达式

int arr[scale(2)];//正确,返回的是一个常量

int i=2; int a2[scale(i)];//错误,传递的是非常量

内联函数和constexpr函数可以在过程中多次定义,但多个定义必须完全相同。因此可以将其放到头文件中。

0 0
原创粉丝点击