Effective C++读书笔记之透彻了解inlining的里里外外

        首先要明确一点,inline函数是c++提供的一个好的方法。可是我们要注意inline函数的概念是,将对函数的每个调用都以函数本体替换之。这样做可能增加你的目标码(object code)大小。在一个内存较小的机器上,这可能降低指令高速缓存的击中率。
      记住,inline只是对编译器的一个申请,不是强制命令。它可以隐喻提出,也可以明确提出。隐喻方式是把函数定义在class定义式内
 class Person {
 pbulic:
  int age() const { return theAge; } //一个隐喻的申请 
 };
 这样的函数通常是成员函数,也可以是friend函数
 明确声明inline函数 的做法则是在其定义式前加上关键字inline。例如:
 template<typename T>
 inline const T& std::max(const T& a, const T& b)   //明确声明 使用inline关键字
 { return a < b? b : a; }
       我们发现inline函数和templates两者通常被定义于头文件中,这是因为大多数建置坏境在编译过程中进行inlining,其实这也是应该的,因为为了将一个函数调用替换为被调用函数的本体,编译器必须知道那个函数是什么样子的。templates在头文件中是因为编译器在具体化一个templates时,需要知道这个templates是什么样子的。它们之间没有逻辑关系。
        同时我们要注意的是虚函数不能是inline。如果程序要取某个inline函数的地址,编译器通常必须为此函数生成一个outline函数本体
 总结:
 1) 将大多数inlining限制在小型,被频繁调用的函数身上。这可使日后的调试过程和二进制(binary upgradability)更容易,也可使潜在的代码膨胀问题最小化,使程序的速度提升机会最大化
 2) 不要只因为function templates 出头文件,就将它们声明为inline

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值