本文为senlie原创。转载请保留此地址:http://blog.csdn.net/zhengsenlie

Item 44 46

1.将大多数 inlining 限制在小型、被频繁调用的函数身上。这可使日后的调试过程和二进制升级更easy,
也可使潜在的代码膨胀问题最小化,使程序的速度提升机会最大化。

2.inline是对编译器的一个申请。
隐喻方式:将函数定义于 class 定义式内, 如成员函数或 friend 函数
明白声明:在定义式前加keyword inline
编译器会拒绝大过复杂的函数 inlining, 而全部对 virtual 函数的调用也都会使 inlining 落空。
由于 virtual 意味 ”等待。直到执行期才确定调用哪个函数“, 而 inline 意味”执行前,先将调用动作替换为被调用函数的本体“。

3.尽管编译器有意愿 inlining 某个函数。还是可能为该函数生成一个 outlined 函数本体。
正常调用能够inlined, 通过函数指针的调用也许不被 inlined

inline void f() {...} //如果编译器有意愿 inline "对f的调用"
void (*pf)() = f; //pf指向 f
//...
f(); //这个调用将被 inlined,由于它是一个正常调用。

pf();//这个调用也许不被 inlined,由于它通过函数指针达成。

4.不要仅仅由于 function templates 出现的头文件,就将它们声明为 inline
Inline 函数通常一定被置于头文件内,由于大多数建置环境在编译过程中进行inlining,而为了将一个“函数调用”
替换为“被调用函数函数的本体”。嘎嘎必须知道那个函数长什么样子。

Templates 通常也被置于头文件内,由于它一旦被使用,编译器为了将它详细化。须要知道它长什么样子。
但 Template 的详细化与 inlining无关。不要仅仅由于 function templates 出现的头文件,就将它们声明为 inline。

5.inline函数f:一旦改变f,全部用到f的client面程序都必须又一次编译
non-inline函数:一旦改变f,client仅仅需又一次连接。

Effective C++ Item 30 inline里里外外相关推荐

  1. 读书笔记 effective c++ Item 30 理解内联的里里外外 (大师入场啦)

    正文 最近北京房价蹭蹭猛涨,买了房子的人心花怒放,没买的人心惊肉跳,咬牙切齿,楼主作为北漂无房一族,着实又亚历山大了一把,这些天晚上睡觉总是很难入睡,即使入睡,也是浮梦连篇,即使亚历山大,对C++的热 ...

  2. Effective C++条款30:透彻了解inlining的里里外外(Understand the ins and outs of inlining)

    Effective C++条款30:透彻了解inlining的里里外外(Understand the ins and outs of inlining) 条款30:透彻了解inlining的里里外外 ...

  3. Effective C#: Item 1 Always use properties instead of accessible data members

    Effective C#: Item 1 Always use properties instead of accessible data members Item 1: 当设计类时,永远用Prope ...

  4. 读书笔记 effective c++ Item 34 区分接口继承和实现继承

    看上去最为简单的(public)继承的概念由两个单独部分组成:函数接口的继承和函数模板继承.这两种继承之间的区别同本书介绍部分讨论的函数声明和函数定义之间的区别完全对应. 1. 类函数的三种实现 作为 ...

  5. Effective C++ 条款30、31

    条款30 透彻了解inlining的里里外外 Inline函数,看起来像函数,动作像函数,比宏好得多,可以调用它们又不需要蒙受函数调用所招致的额外开销.但是,就像世界没有免费的午餐一样,inline的 ...

  6. More Effective C++ Item 附2:一个auto_ptr的实现实例

    More Effective C++的前言.导读和附1(侯捷译),以及在 "C++ 中计算物件个数"和"为智能指标实作 operator->*"(陈崴译, ...

  7. 读书笔记 effective c++ Item 50 了解何时替换new和delete 是有意义的

    1. 自定义new和delete的三个常见原因 我们先回顾一下基本原理.为什么人们一开始就想去替换编译器提供的operator new和operator delete版本?有三个最常见的原因: 为了检 ...

  8. 读书笔记 effective c++ Item 49 理解new-handler的行为

    1. new-handler介绍 当操作符new不能满足内存分配请求的时候,它就会抛出异常.很久之前,它会返回一个null指针,一些旧的编译器仍然会这么做.你仍然会看到这种旧行为,但是我会把关于它的讨 ...

  9. 读书笔记 effective c++ Item 18 使接口容易被正确使用,不容易被误用

    1. 什么样的接口才是好的接口 C++中充斥着接口:函数接口,类接口,模板接口.每个接口都是客户同你的代码进行交互的一种方法.假设你正在面对的是一些"讲道理"的人员,这些客户尝试把 ...

最新文章

  1. 嵌入式python 图形界面_有哪些好的嵌入式操作系统界面库(GUI library)?
  2. 使用jsDelivr加速GitHub的静态资源
  3. java实现倒计时闹钟_js带闹铃功能的倒计时代码
  4. 20180530更新
  5. centos7.0改变用户创建目录组权限
  6. Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.24.215] failed: connect timed ou
  7. C++_类和对象_封装_属性和行为做为整体_封装案例---C++语言工作笔记036
  8. C语言三个链表的关联,有能者相互切磋---怎样实现ABC三个链表的相互操作?
  9. Linux内核和用户空间数据交互copy_to_user和copy_from_user
  10. 我是如何将LINE表情包转化为微信表情包的?/How I convert Line stickers into Wechat stickers just as the way they are?
  11. 串口总线舵机之配置舵机
  12. h5 标签video和audio标签的下载按钮
  13. 手把手教你构建 C 语言编译器(1)- 设计
  14. linux虚拟机释放内存cache
  15. java标签用setbounds_setBounds的用法
  16. 智算时代里,浪潮存储的使命与担当
  17. XXX@1.0.0 build: `NODE_ENV=production webpack --config webpack.config.js`报错的解决
  18. aria2 32bit Android,【各版本整合】32/64位Aria2 Tools - 支持RPC协议 AriaNG(客户端+网页版)...
  19. windows 设置设置程序的起始位置
  20. Swift学习笔记(5):集合类型

热门文章

  1. 边缘数据中心维护的4个基本组件
  2. G20国家科技竞争力大盘点,中国科研创新表现突出,人工智能变道超车
  3. 特斯拉VS Waymo:谁将赢得无人驾驶汽车竞赛?
  4. 果蝇大脑研究能够改进计算机相似性搜索算法
  5. 腾讯云发布全链路数据开发平台WeData,大数据开发迈入新时代
  6. 哈希表哪家强?几大编程语言吵起来了!
  7. Maven自动FTP远程部署
  8. Spring中继承配置的注入方法
  9. /etc/passwd文件小析
  10. mysql--多实例启动方法