文档章节

Effective C++阅读笔记

曾劲松
 曾劲松
发布于 2016/04/13 22:16
字数 831
阅读 25
收藏 2
  1. 条款09:不要在构造函数或析构函数中调用虚函数

    子类构造过程中先初始化基类,子类还没有构造完成,只会调用基类的虚函数。一种通俗说法更好,此时的虚函数还不是虚函数。

    解决办法:由下向上传递,将派生类构造函数时,必要信息传给基类构造函数,由基类构造函数调用基类成员打印子类的信息。

  2. 条款22:将成员变量声明为private

    这就是封装的好处:

    一个public变量被取消,所有使用它的代码被破坏;

    一个protect变量被取消,所有使用它的派生类代码被破坏;

    一个private变量被取消,只有本类代码被破坏;

  3. 条款30:透测了解inlining的里里外外

    观点:将对函数的每一个调用都用函数本体替换之(大部分编译器在编译期inline,部分编译器在链接期,最后少部分竟在运行期)。

    可以避免一些因为函数调用所带来的开销。缺点:a但是会增大目标码的大小。在有内存限制的计算机上,inlining导致的代码膨胀会导致额外的换页行为,降低指令高速缓存器的击中率,以及伴随的效率损失。b inline无法随着程序库的升级而升级,f()为inline,客户将f本体安插如自己代码中,一旦f改变,所有客户代码必须重新编译。f不为inline,只需将修改的f编译,重新链接所有文件即可。这也是动态链接库技术的好处。

    关于模板函数的inline,模板在使用时被具体化,inline在使用时替换之,但是模板的具体化和inline无关。

    编译器拒绝太过复杂的调用(循环或递归),也会拒绝虚函数(直到运行时才确定调用哪个函数,而inline是在运行前替换成函数本体)。同时编译器也会拒绝函数指针的inline

    所以inline只是对编译器的一个申请,编译器可以拒绝,大多数编译器如果无法将你的要求inline,会给出警告。

  4. 一个程序将80%的程序执行时间花费在20%的代码上,你要优化就必须找到这20%,并将之inline或瘦身。

  5. 条款31:将文件间的编译依存关系降至最低。

    接口与 实现分离。编译依存最小化的本质:用“声明的依存性(前置声明)”替换“定义的依存性(#include"头文件")”。具体的做法是:在类A的头文件中使用类B的前置声明,在类A的实现文件中#include两个文件的头文件。

    类内部数据成员如果是其他类对象,最好用引用或指针+前置声明,不要用对象本身(否则其他类修改,自己就要重新编译);

    程序库的头文件应该以“完全且仅有声明式”。相依于声明式,不相依于定义式。

  6. 区分handle class和interface class(C++primer第五版的字符统计程序便是最好的例子)

© 著作权归作者所有

曾劲松
粉丝 5
博文 200
码字总数 141434
作品 0
武汉
私信 提问
【2018.08.13 C与C++基础】C++语言的设计与演化读书笔记

先占坑 老实说看这本书的时候,有很多地方都很迷糊,但却说不清楚问题到底在哪里,只能和Effective C++联系起来,更深层次的东西就想不到了。 链接: https://blog.csdn.net/cloudqiu/artic...

waitingdeng
2018/08/21
0
0
C++ 书籍大汇

C++ 书籍大汇 C++ 书籍大汇 语言基础入门: 1. C++ Primer 《C++入门》(通常不用中文名) by Stanley B. Lippman 有第三版和第四版,如其名,是C++入门的不二选择,是全面广泛的参考书目,内...

长平狐
2012/09/20
285
0
学习C++的50条,谨以送给C++的粉丝们

1.把C++当成一门新的语言学习(和C没啥关系!真的);   2.看《Thinking In C++》,不要看《C++变成死相》(C++编程思想,翻译的非常差);   3.看《The C++ Programming Language》(这...

地瓜儿
2013/01/11
1K
7
stl-stable_sort源码学习笔记

前几天,一个新同事前来询问算法stl-stablesort的情况。由于离上次研读stl源码时间久已(两三年前的事儿了),有些细节笔记模糊了。所以就找了sgi-stl和ms-stl俩版本,重新复习一遍其中的stl...

huangjunkun
2011/11/07
1K
0
C++各阶段学习书目

1. 入门 Lippman的《Essential C++》 顾名思义,这本书是很短小精悍的。通过这本书,可以对C++的最常用和重要的特性有全面的了解,并对C++的全貌有一个概念。虽然这远远不够,但就是这样的书...

晨曦之光
2012/04/24
441
1

没有更多内容

加载失败,请刷新页面

加载更多

如何编写高质量的 JS 函数(1) -- 敲山震虎篇

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/7lCK9cHmunvYlbm7Xi7JxQ 作者:杨昆 一千个读者,有一千个哈姆雷特。 此系列文章将会从函数的执行机制、鲁棒性、函...

vivo互联网技术
46分钟前
5
0
学会这5个Excel技巧,让你拒绝加班

在网上,随处都可以看到Excel技巧,估计已看腻了吧?但下面5个Excel技巧会让你相见恨晚。关键的是它们个个还很实用 图一 技巧1:快速删除边框 有时当我们处理数据需要去掉边框,按Ctrl+Shif...

干货趣分享
今天
11
0
JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
9
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
15
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
3.3K
25

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部