内联函数

在C++中,宏的概念是作为内联函数来实现的。
内联函数无论从哪方面说都是真正的函数,唯一不同之处在于内联函数在适当的地方像宏一样展开,所以不需要函数调用的开销。因此,应该(几乎)永远不要使用宏,只使用内联函数。
任何在类中定义的函数(不包括在类中声明,在类外定义的成员函数)自动地成为内联函数,但也可以在非类的函数前加上inline关键字使之成为内联函数。但为了使之有效,必须使函数体和声明结合在一起,否则,编译器将它作为普通函数对待。

[b]原理:[/b]
一般应该把内联定义放在头文件里。当编译器看到这个定义时,它把函数类型(函数名+返回值)和函数体放到符号表里。当使用函数时,编译器检查以确保调用是正确的且返回值被正确使用,然后将函数调用替换为函数体,因而消除开销。
内联代码的确占据空间,但假如函数较小,这实际上比为了一个普通函数而产生的代码(参数压栈和执行CALL)占用的空间还要小。
使用内联函数的目的是减少函数调用的开销,但是假如函数较大,由于在每处调用的地方都有复制代码,将使得代码膨胀。

[b]限制:[/b]
1. 假如函数太复杂,编译器将不能执行内联,这取决于编译器。
2. 假如要显式地或者隐式地取函数地址,编译器也不能执行内联。

为了保持接口清楚,所有的方法最好都在类外面定义,这并不妨碍最优化,对适合内聚的函数使用inline即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值