博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Effective C++阅读笔记
阅读量:6378 次
发布时间:2019-06-23

本文共 1140 字,大约阅读时间需要 3 分钟。

hot3.png

  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第五版的字符统计程序便是最好的例子)

转载于:https://my.oschina.net/zengjs275/blog/658933

你可能感兴趣的文章
白利用的集大成者:新型远控木马上演移形换影大法
查看>>
SAS 2016年全球营收达32亿美元 继续保持稳步增长
查看>>
2017必备的八款最佳反勒索软件工具
查看>>
从Effective Java总结一些有助安卓开发的建议
查看>>
以一当十的程序员不是传说
查看>>
Vizinex RFID 和Brady SmartID推出航空标签
查看>>
Facebook 否认趋势话题存在政治偏见,但将做出调整
查看>>
云纵发布“纵横客“ 新一代互联网CRM开启餐饮行业营销新模式
查看>>
TuShare(3):使用pandas 压缩存储hdf5文件
查看>>
物联网到底何时才能称为“爆发”?
查看>>
量子计算系统IBM Q进阶 世界再无难题
查看>>
标准不一难解决 智能家居普及任重而道远
查看>>
《Java多线程编程核心技术》——1.2节使用多线程
查看>>
JUniversal:基于 Java 新式跨平台移动应用方法
查看>>
不用惊慌 关于苹果警告的一些分析
查看>>
《VMware vCAT权威指南:成功构建云环境的核心技术和方法》一3.4 资源组架构...
查看>>
svn在eclipse中的使用
查看>>
《VMware 网络技术:原理与实践》—— 2.3 OSI模型
查看>>
大批用户要求 Dropbox 开源将被关闭的 Mailbox
查看>>
ViewPagerIndicator+viewpager指示器详解
查看>>