2019-01-28 内联函数

通过inline声明,编译器首先在函数调用处使用函数体本身语句替换了函数调用语句,然后编译替换后的代码。因此,通过内联函数,编译器不需要跳转到内存其他地址去执行函数调用,也不需要保留函数调用时的现场数据

类似于宏函数  但又不是宏函数  比宏好很多  宏是在预编译期单纯的替换文本   内联函数实在编译期 把函数本身替换到函数调用出

内联函数直接定义在头文件中




inline函数的优缺点分析


 通过下面这些优缺点总结你大概会更理解为什么要使用inline函数:

优点:

它通过避免函数调用所带来的开销来提高你程序的运行速度。

当函数调用发生时,它节省了变量弹栈、压栈的开销。

它避免了一个函数执行完返回原现场的开销。

通过将函数声明为内联,你可以把函数定义放在头文件内。

缺点:

因为代码的扩展,内联函数增大了可执行程序的体积。

C++内联函数的展开是中编译阶段,这就意味着如果你的内联函数发生了改动,那么就需要重新编译代码。

当你把内联函数放在头文件中时,它将会使你的头文件信息变多,不过头文件的使用者不用在意这些。

有时候内联函数并不受到青睐,比如在嵌入式系统中,嵌入式系统的存储约束可能不允许体积很大的可执行程序。


什么时候该使用内联函数


当程序设计需要时,每个函数都可以声明为inline。下面列举一些有用的建议:

当对程序执行性能有要求时,那么就使用内联函数吧。

当你想宏定义一个函数时,那就果断使用内联函数吧。

在类内部定义的函数会默认声明为inline函数,这有利于 类实现细节的隐藏。


关键点

内联声明只是一种对编译器的建议,编译器是否采用内联措施由编译器自己来决定。甚至在汇编阶段或链接阶段,一些没有inline声明的函数编译器也会将它内联展开。

编译器的内联看起来就像是代码的复制与粘贴,这与预处理宏是很不同的:宏是强制的内联展开,可能将会污染所有的命名空间与代码,将为程序的调试带来困难。

所有中类中定义的函数都默认声明为inline函数,所有我们不用显示地去声明inline。

虚函数不允许内联。

虽然说模板函数放中头文件中,但它们不一定是内联的。(不是说定义在头文件中的函数都是内联函数)。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 内联的疑惑 写这篇文章的初衷源自于对netdata项目把C函数声明为static inline的用法不解。从语言特...
    typesafe阅读 2,363评论 1 1
  • 1 内联函数与宏定义 C++ 语言支持函数内联,其目的是为了提高函数的执行效率(速度)。在C程序中,可以用宏代码提...
    woshishui1243阅读 969评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,679评论 1 32
  • 引入内联函数的目的是为了解决程序中函数调用的效率问题。 函数是一种更高级的抽象。它的引入使得编程者只关心函数的功能...
    平谦阅读 2,347评论 0 1
  • 几种语言的特性 汇编程序:将汇编语言源程序翻译成目标程序编译程序:将高级语言源程序翻译成目标程序解释程序:将高级语...
    囊萤映雪的萤阅读 3,066评论 1 5

友情链接更多精彩内容