2019独角兽企业重金招聘Python工程师标准>>>

  • 条款1:视C++为一个语言联邦:C、Object-Oriented C++、Template C++、STL

对于内置类型pass-by-value 比pass-by-reference高效,用户自定义类型pass-by-reference-to-const更好

STL中迭代器和函数对象都是在C指针的基础上塑造出来的,所以旧式的C pass-by-value再次试用

  • 条款2:尽量以const,enum,inline替换#define

1、对于单纯的常量,最好以const对象或enums替代#define

2、对于形似函数的宏,最好用inline函数替代#define

因为使用的#define 的变量未进入编译器的记号表(symbol table)

#define ASPECT_RATIO 1.63 ==>const double AspectRatio = 1.63

  • 条款3:尽可能使用const

void f1(const  Widget* pw)  <=> void f2(Widget const *pw)     //等价,f1/f2获得一个指针,指向一个常量的(不变的)Widget对象

  • 条款4:确定对象使用前已被初始化。

对内置类的对象进行手工初始化,因为C++不保证初始化它们。

构造函数最好使用成员初值列,而不要在构造函数内使用赋值操作。前者效率更高,后者要先调用 default构造再赋值

为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static对象。????

  • 条款5:了解C++默默编写并调用哪些函数。

9、编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。是 public且 inline 的

10、当手工创建一个构造函数后,编译不会再创建default构造函数。

11、内含引用或const成员,编译器不会创建copy assignment操作符。

class Empty{}
==》
class Empty{public:Empty(){}    Empty(const Empty& rhs){}~Empty(){}    Empty& operator=(const Empty& rhs){} //拷贝复制函数
}
  • 条款6:若不想使用编译器自动生成的函数,应该明确拒绝。

12、为驳回编译器自动提供的技能,可将相应的成员函数声明为private并且不予实现。

  • 条款7:为多态基类声明virtual析构函数。

13、polymorphic带有多态性质的base classes 应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。当子类以父类指针的形式被析构时,子类对象的成分没有被销毁,故需要将父类的析构函数需要为virtual

14、Classes的设计目的如果不是作为base classes使用,或不是为了具备多态性,就不应该声明virtual析构函数。

15、若父类带有pure virtual(纯虚函数)时,子类的析构函数中会有对父类析构函数的调用,因此必须为父类的纯虚函数提供一份定义。

  • 条款8:别让异常逃离析构函数。

16、析构函数绝对不要吐出异常,如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不再传播)或结束程序。

17、如果客户需要对某些操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非析构函数)执行该操作。

  • 条款9:绝不在构造和析构过程中调用virtual函数。

18、子类构造时,先调用base class,此时子类被认为是一个base class。析构时先调用自身的析构函数,再调用base class的析构函数。

  • 条款10:令operator= 返回一个reference to *this。

Widget& operator=( constWidget& rhs){... return* this;}

  • 条款11:在operator=中处理“自我赋值”

20、确保当对象自我赋值时operator=有良好的行为。其中技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及copy-and-swap。

21、确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。

条款12:复制对象时勿忘其每一成分。

资源管理:

  • 条款13:以对象管理资源。

25、以对象管理资源的两个关键想法:

(1)、获得资源后立刻放进管理对象。资源获取时机便是初始化时机。

(2)、管理对象运用析构函数确保资源被释放。

26、使用shared_ptr智能指针。

条款14:在资源管理类中小心copying行为。

转载于:https://my.oschina.net/u/347414/blog/2999366

effective c++相关推荐

  1. Effective C++ 50条款

    Effective C++ 50条款 条款 1:尽量用 const 和 inline 而不用#define--尽量用编译器而不用预处理 #define max(a,b) ((a) > (b) ? ...

  2. [.NET] 《Effective C#》快速笔记 - C# 中的动态编程

    <Effective C#>快速笔记 - C# 中的动态编程 静态类型和动态类型各有所长,静态类型能够让编译器帮你找出更多的错误,因为编译器能够在编译时进行大部分的检查工作.C# 是一种静 ...

  3. Effective STL 50条有效使用STL的经验笔记

    Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...

  4. 《Effective C++》第8章 定制new和delete-读书笔记

    章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...

  5. VirtualBox: Effective UID is not root

    为什么80%的码农都做不了架构师?>>>    桌面上运行virtualbox出错: The virtual machine 'xp' has terminated unexpect ...

  6. Effective Java:对于全部对象都通用的方法

    前言: 读这本书第1条规则的时候就感觉到这是一本非常好的书.可以把我们的Java功底提升一个档次,我还是比較推荐的.这里我主要就关于覆盖equals.hashCode和toString方法来做一个笔记 ...

  7. 第 3 次读 Effective Java,这 58 个技巧最值!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:Dong GuoChao <Effective ...

  8. Effective C++ 类与函数设计和申明

    Effective C++ 类与函数的设计和申明 在看<Effective C++>这本书的过程中,我无数次的发出感叹,这他妈写得太好了,句句一针见血,直接说到点上.所以决定把这本书的内容 ...

  9. 量化网络训练--Towards Effective Low-bitwidth Convolutional Neural Networks

    Towards Effective Low-bitwidth Convolutional Neural Networks CVPR2018 https://github.com/nowgood/Qua ...

  10. 卫星图像分割--Effective Use of Dilated Convolutions for Segmenting Small Object Instances

    Effective Use of Dilated Convolutions for Segmenting Small Object Instances in Remote Sensing Imager ...

最新文章

  1. linux flush 保证 磁盘,linux cache介绍及控制
  2. WF(9):本地服务之事件处理
  3. web第6次作业position
  4. NSURLRequest详解IOS最基础的api
  5. 2018年网络规划设计师下午真题
  6. OneMap Client API
  7. Intellij mac快捷键
  8. MATLAB 程序暂停的方法
  9. 小红书怎么看关键词排名?如何提升笔记自然搜索排名
  10. Teigha的BlockTableRecord获取方法
  11. 【presto 】presto 新版本升级详情
  12. [OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js-Cornerstone Examples-基石实例-上...
  13. 如何混迹程序猿江湖,你得懂程序员黑话暗语!
  14. EXCEL仪表盘,可视化大屏,数据看板制作
  15. 《遥感原理与应用》总结——遥感图像自动识别分类
  16. 不用计算机算arctanx,arctanx等于什么(arctan计算器在线)
  17. C++ 模板与泛型编程简述
  18. 0.总也记不住的考场or竞赛必备stl各种用法及其他技巧
  19. IOS开发之微信山寨版
  20. CSS权重,属性书写顺序,布局技巧和网页布局总结,盒子模型排列位置---CSS

热门文章

  1. GentleNet使用之详细图解[语法使用增强版]
  2. (转)I,P,B帧和PTS,DTS的关系
  3. VMware Vsphere4 资源分配与资源限制
  4. 3.5 面向连接的运输:TCP
  5. 前端自动化工具 grunt 插件 uglify 的简单使用(一)
  6. Linux4.4 TCP源码分析
  7. 8天学通MongoDB——第二天 细说增删查改
  8. MVC中一个表单实现多个提交按钮(一个action搞定添删改)
  9. Python 精要参考(第二版) 第六章 函数与函数编程
  10. eBook 功能模块二之设置模块