C++编程基础——内联函数

                                                              内联函数

1、功能

在C语言中,我们使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,那么在C++中有没有相同的技术或者更好的实现方法呢?答案是有的,那就是内联函数。内联函数作为编译器优化手段的一种技术,在降低运行时间上非常有用。总之内联函数具有带参宏定义的优点而不出现副作用。 

 内联函数是C++的增强特性之一,用来降低程序的运行时间。当内联函数收到编译器的指示时,即可发生内联:编译器将使用函数的定义体来替代函数调用语句,这种替代行为发生在编译阶段而非程序运行阶段。

值得注意的是,内联函数仅仅是对编译器的内联建议,编译器是否觉得采取你的建议取决于函数是否符合内联的有利条件。如何函数体非常大,那么编译器将忽略函数的内联声明,而将内联函数作为普通函数处理。

2、优缺点

优点:

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

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

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

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

缺点:

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

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

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

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

3、什么时候该使用内联函数

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

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

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

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

关键点

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

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

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

4)虚函数不允许内联

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

6)实际工作中,通常在头文件中定义根据需要定义为内联函数。内联函数的定义和声明必须在一个文件中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值