条款 30 :透彻了解inlining的里里外外

条款 30 :透彻了解inlining的里里外外

*Understand the ins and outs of inlining

关于inline 函数:

  1. 可以调用他们但是又不需要蒙受调用函数招致的额外开销。
  2. inline函数背后的整体观念是,将“对函数的每一个调用”都以函数本体替换之。这样的做法可能会导致目标代码增大,所以一般而言只对常用的短小函数声明为inline。
  3. inline只是对编译器的一个申请,而不是强制命令。
  4. inline函数通常被放在头文件内。
  5. 对于virtual函数申请inline是无稽之谈。因为virtual意味着等待,直到运行期才知道确定调用哪一个函数,而inline意味着,执行前先将调用动作替换为函数本体。
  6. 实际上继承体系内的构造和析构函数通常不该声明为inline。因为看似不含有任何代码的构造和析构可能继承了许多你不知道的东西。
  7. 使用inline一定要明确知道:inline函数无法随着程序库的升级而升级。

关于inline的声明形式:

一.隐式inline申请:(函数在class内被定义)

class Person{
public:
    ...
    int age() const{return theAge;}//inline函数
    ...
private:
    int theAge;
}

二.明确申请:例如标准库的max实现如下

template<typename T>
inline const T& std::max(const T& a,const T& b){//inline函数
    retrun a<b?b:a;
}

请记住

  1. 将大多数inlining限制在小型,被频繁调用的函数身上。这可以使日后的调试过程和二进制升级更容易,也可以时潜在的代码膨胀问题最小化,使程序的速度提升机会最大化。
  2. 不要只因为function templates出现在头文件,就将他声明为inline。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值