本文为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 JavaScript Item 30 理解prototype, getPrototypeOf和__proto__的不同

    本系列作为Effective JavaScript的读书笔记. prototype,getPropertyOf和__proto__是三个用来訪问prototype的方法.它们的命名方式非常类似因此非常 ...

  3. Effective STL 学习笔记 Item 30: 保证目标区间足够大

    Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...

  4. effective C++ Item 33 避免隐藏继承而来的名字

    1. 普通作用域中的隐藏 名字实际上和继承没有关系.有关系的是作用域.我们都知道像下面的代码: int x; // global variable void someFunc() { double x ...

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

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

  6. 读书笔记 effective c++ Item 44 将与模板参数无关的代码抽离出来

    1. 使用模板可能导致代码膨胀 使用模板是节省时间和避免代码重用的很好的方法.你不需要手动输入20个相同的类名,每个类有15个成员函数,相反,你只需要输入一个类模板,然后让编译器来为你实例化20个特定 ...

  7. 读书笔记 effective c++ Item 46 如果想进行类型转换,在模板内部定义非成员函数

    1. 问题的引入——将operator*模板化 Item 24中解释了为什么对于所有参数的隐式类型转换,只有非成员函数是合格的,并且使用了一个为Rational 类创建的operator*函数作为实例 ...

  8. 读书笔记 effective C++ Item 33 避免隐藏继承而来的名字

    1. 普通作用域中的隐藏 名字实际上和继承没有关系.有关系的是作用域.我们都知道像下面的代码: int x; // global variable void someFunc() { double x ...

  9. 读书笔记 effective c++ Item 22 将数据成员声明成private

    我们首先看一下为什么数据成员不应该是public的,然后我们将会看到应用在public数据成员上的论证同样适用于protected成员.最后够得出结论:数据成员应该是private的. 1. 为什么数 ...

随机推荐

  1. 洛谷 P1462 通往奥格瑞玛的道路 二分 最短路

    #include<cstdio> #include<queue> #include<cstring> #include<algorithm> using ...

  2. 织梦DEDECMS系统中文章内容为空 用SQL语句如何删除?

    织梦后台里提供了清空内容为空的文章,可是发现并不好用,有些空文章还是删除不了,而有些文章不是空的,只是采到了几个字,这些无法清除,于是就手动来清除这个文章.开始是一个一个文章找,一个一个来删除,后来觉 ...

  3. java 截取点后面的字符串

    int index = path.lastIndexOf("."); char[] ch = path.toCharArray(); //根据 copyValueOf(char[] ...

  4. Jtester使用

    1.在Jtester中使用DataMap 为什么要使用DataMap? 早先的jTester中提供了dbFit方式来准备和验证数据库数据,应该来说,这个工具解决了很多问题.实际使用过程中,开发同学反映 ...

  5. 【BZOJ 1296】 [SCOI2009]粉刷匠

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] f[i][j][k]表示第i行前j列刷了k次,最大满意度 f[][j][k]=max{f[i][l][k],f[i][l][k-1] ...

  6. SWT自定义选项卡CTabFolder

    SWT自定义选项卡CTabFolder 学习了:http://blog.csdn.net/dreajay/article/details/17391731 package com.swt; impor ...

  7. Android图片旋转,缩放,位移,倾斜,对称完整演示样例(一)——imageView.setImageMatrix(matrix)和Matrix

    MainActivity例如以下: import android.os.Bundle; import android.view.MotionEvent; import android.view.Vie ...

  8. Linux 6.3下安装Oracle Enterprise Cloud Control 12c

    Oracle enterprise cloud control 12c的安装是一个比較复杂的过程,由于他须要依赖于Oracel database以及Oracle Weblogic. 如今Oracle已 ...

  9. BsonDocument

    http://api.mongodb.com/csharp/current/html/T_MongoDB_Bson_BsonDocument.htm 如何取出document中的数据 BsonDocu ...

  10. iOS中关于字符 “&”的作用?

    如NSFileManager中关于判断是否目录的 iOS中关于字符 "&"的作用? >> ios这个答案描述的挺清楚的:http://www.goodpm.ne ...