定义:
在函数定义(注意不是函数声明)前加上 inline 关键字
(1)编译器在编译阶段对 inline 函数进行处理,系统尝试将该函数的调用动作替换成函数本体,来提升性能。
(2)inline 只是我们开发者对编译器的一个建议,编译器可以尝试去做,也可以不去做,取决于编译器的诊断功能,我们无法控制。
(3)内联函数的定义需要放在头文件中,这样的话,在需要用到内联函数的.cpp文件,可以通过#include 将内联函数的源代码#include 进来,
因为在编译的时候需要用函数的本体去替换函数调用的地方。
普通函数如果把函数定义写在头文件中,在多个.cpp文件中#include 这个头文件时,就会发生函数重定义的现象
优缺点:
(1)会导致代码膨胀问题(代码段也会占用内存),所以内联函数体尽可能小
(2)各种编译器对内联函数的处理各不相同(可能优化成一个返回值,也可能是函数本体,也可能并没有优化)
constexpr
constexpr int fun() // 可以将constexpr 声明的函数看成是更加严格的内联函数 { // 要求函数体特别简单,不然容易出现变异错误 }
inline 、define、const 区别
inline 内联函数对编译器提出建议,是否进行宏替换,编译器有权拒绝
define宏定义 定义预编译时处理的,只进行简单的字符替换,缺乏类型的检查机制
const 关键字的出现,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。但是不能修改类的数据成员,不能在函数中调用其他不是const的函数。
原文:https://www.cnblogs.com/zhiminzeng/p/13058075.html