inline成员函数 以及与宏定义区别

上一篇文章我提到inline函数对性能可能有较大的影响,这就促使我对这个inline函数做一个综合的深入研究。总结起来使用inline函数有如下几点:

注意这里讨论的只是类的成员函数。

1。在类的声明里实现的函数自动为inline。 也可以在类申明外定义为inline。但是这一部分必须与类的声明在同一个.h文件里。如果定义在cpp文件里,就会给出编译错误。我开头就很不明白,为什么我的inline就不行呢?原因就在于这个规则。

2。很多人喜欢把inline函数直接写在类声明里,包括stl,都是这么写的。我在阅读这些程序时,就经常发现思维被函数的实现牵引走, 从而对类的接口变得模糊。因此建议不要在类声明里写实现,不管他多简单。这样虽然对些程序的人来说麻烦一些,但是这样写出的程序要清晰多了。用户或者读者不必要深入到实现细节,而可以关注类的接口上面。对大多数使用来说,实现细节是完全可以不用了解的。比如你使用STL的类,难道还非要明白他们是怎么实现的吗?

3。inline函数与性能的关系不是一个肯定的关系,有可能加快,也有可能会变慢。有可能使代码变大,也有可能变小。要测试才能知道。

4。inline函数比macro要好。因为inline函数更像一个函数,它也作类型检查,匹配。macro就只会简单得展开。在很多情况下,macro展开有可能导致难以查到的错误!有大量C程序经验的人对此不会陌生。

比如一个求绝对值:

用macro:

#define abs(x) (x)>0?(x):-(x)

abs(i++)会被展开为:(i++)>0?(i++):-(i++)

显然这不是我们想要的。因为i++被执行了两次。


inline int abs(x) { x>0?x:-x;}

abs(i++) 等价为:

j=i++;j>0?j:-j;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值