现在的 C++ 编译器能够进行编译优化 ,
内联函数的不确定性 : 编译器内联函数是基于 编译器的优化策略和代码的特性 来决定的 ;
简单且频繁调用的函数 内联大概率成功 , 复杂的函数 大概率内联失败 , 内联成功可能会增加代码的大小 , 也可能会导致程序运行速度变慢 ;
可以通过设置调整 C++ 编译器 的参数 和 优化级别 , 优化编译后的程序运行效果 ;
即使没有使用inline关键字修饰的函数 , C++编译器 根据 函数特性 和 调用频率 , 结合当前的 程序执行效率 和 综合性能 , 决定是否将函数进行内联 ;
内联函数的目的是减少函数调用的开销 , 提高程序的执行效率 ;
编译器在决定是否内联函数时 , 会考虑函数的复杂性 , 大小和调用次数等因素 ;
如果 函数比较简单 且被频繁调用 , 编译器可能会选择将其内联 , 以提高程序的执行效率 ;
内联失败的几种情况 : 如果 内联函数 有如下情况 , 即使使用 inline 关键字声明内联函数 , 也是无效的 ;
函数中 如果 有循环语句 / 有很多条件判定语句 / 函数体庞大 / 对函数取地址操作 / 单独声明内联函数 , 即使写了 inline 内联函数 , 编译器也不会同意内联请求 ;
内联函数 与 普通函数 对比 , 其优势只是 省去了 函数调用时 的 压栈 / 跳转 / 返回 的开销 ;
如果 函数体 由于过大或执行特殊操作 的执行开销 远大于 压栈 / 跳转 / 返回 的开销 , 此时内联函数 反而会降低程序的整体性能 , 编译器会权衡二者对性能的影响 , 同意 / 否决 函数 的 内联请求 ;