effective C++ 读后笔记
首先不得不说侯捷翻译的书大部分我都很喜欢,因为侯捷本身是一名出色的C++技术专家。这本书讲的是C++如何高效的运行,我想要成为一名卓越的开发人员,代码的高效性是必不可少的。很多人的代码质量很差,即使能够勉强运行在以后的维护和重新编码中存在着巨大的问题,甚至是日后的运行投入中会遇到致命的错误。
条款01:视C++为一个语言联邦而不是单一一门语言:其可以分为如下几种语言 C、 Object—Oriented C++(封装、继承、多态、虚函数)、Template C++(泛型编程)、STL。C++的高效编程取决于我们使用C++的哪一部分。
条款02:尽量以const,enum,inline替换#define
条款03:尽可能使用const 它可以在class外部修饰global或namespace作用域中的常量,或修饰文件函数或者区块作用域中被声明为static的对象。也可以用它修饰class内部的static和non-static成员变量。面对指针,你也可以指出指针自身、指针所指物,或两者都是(或都不是)const,const出现在星号左边,则表示被指物是常量,如果const出现在星号右边则指针自身是常量。
条款04:确定对象被使用之前已被初始化 内置类型意外的任何其他东西,初始化的责任都落在构造函数身上:规则很简单,确保每一个构造函数都将对象的每一个成员初始化。构造函数最好使用成员初始列,而不要再构造函数本体内使用赋值操作。为免除“跨编译单元之初始化次序”问题,请以local static 代替 non-local static对象。
条款05:了解C++默默编写并调用哪些函数 就是说编译器自动补充了些什么在你只写了一些简单代码的时候比如你写了class XCoderLiu{};
就相当于写了下面这样的代码
class XCoderLiu{
public:
XCoderLiu(){...}
XCoderLiu(const XCoderLiu& rhs){...}
~XCoderLiu(){...}
XCoderLiu& operator=(const XCoderLiu& rhs){...}
};
编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。
条款06:不想使用编译器自动生成的函数应该明确拒绝 为驳回编译器自动提供的机能,可将相应的成员函数声明为private并且不予实现。(貌似编译器提供的默认拷贝函数总是多多少少存在一些问题还是自己写比较好)
条款07:为多态基类声明virtual析构函数 任何class只要带有virtual函数几乎确定应该也有一个virtual析构函数
条款08:别让异常逃离析构函数 如果某个操作可能在失败时抛出异常,而又存在某种需要必须处理该异常,那么这个异常必须来自析构函数意外的某个函数。因为当系统存在两个以上的异常时候会出现不明确的错误,析构函数绝对不能吐出异常
条款09:绝对不在构造和析构函数中调用virtual函数 因为这类调用从不下降至derived class
条款10:令operator = 返回一个reference to *this (this指针的引用)
条款11:在operator=中处理“自我赋值” if(this == &rhs) return *this;
条款12:复制对象时勿忘其每一个成分 当你自己声明拷贝函数时编译器似乎被冒犯一样当你的实现代码几乎必然出错的时候却不告诉你。另外不要尝试在一个拷贝函数中实现另一个拷贝函数,应该将共同机能放进第三个函数中,并由两个拷贝函数共同调用。
条款13:以对象管理资源,在拷贝构造函数或者拷贝分配操作符复制它们,他们会变成null,而复制所得的指针将取得资源的唯一拥有权。
条款14:在资源管理类中小心coping行为 资源取得时机便是初始化时机
条款15: 在资源管理类中提供该对原始资源的访问 对原始资源的访问可能经由显示转换和隐式转换 一般而言显式转换比较安全 但是隐式转换对客户笔记哦啊方便。
条款16:成对地使用new和delete时要采用相同形式
条款17:以独立语句将newed对象置于智能指针 如果不这样做 一旦异常被抛出 有可能导致难以察觉的错误
条款18:
effective C++ 读后笔记的更多相关文章
- Effective前端2:优化html标签
div { float: left; } .keyboard > div + div { margin-left: 8px; } --> div{display:table-cell;ve ...
- Effective java笔记(二),所有对象的通用方法
Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...
- 《Effective java》-----读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...
- 《Effective Java》学习笔记——积累和激励
从一个实际案例说起 国庆长假前一个礼拜,老大给我分配了这么一个bug,就是打印出来的报表数量为整数的,有的带小数位,有的不带,毫无规律. 根据短短的两个多月的工作经验以及猜测,最终把范围缩小到以下这段 ...
- Effective前端5:减少前端代码耦合
什么是代码耦合?代码耦合的表现是改了一点毛发而牵动了全身,或者是想要改点东西,需要在一堆代码里面找半天.由于前端需要组织js/css/html,耦合的问题可能会更加明显,下面按照耦合的情况分别说明: ...
- Effective前端4:尽可能地使用伪元素
伪元素是一个好东西,但是很多人都没怎么用,因为他们觉得伪元素太诡异了.其实使用伪元素有很多好处,最大的好处是它可以简化页面的html标签,同时用起来也很方便,善于使用伪元素可以让你的页面更加地简洁优雅 ...
- Effective前端3:用CSS画一个三角形
p { text-indent: 2em } .triangle-container p { text-indent: 0 } img { margin: 15px 0 } 三角形的场景很常见,打开一 ...
- Effective前端1:能使用html/css解决的问题就不要使用JS
div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
随机推荐
- Windows 服务与 Web 服务
两个完全不同的东西. Windows 服务,伴随着windows的启动而启动,主要处理长时间监听的任务. Web服务,基于Web,部署在服务器上,用于处理客户端的请求.
- iOS 地图坐标系之间的转换WGS-84世界标准坐标、GCJ-02中国国测局(火星坐标,高德地图)、BD-09百度坐标系转换
开发过程中遇到地图定位不准确,存在偏差.首先确认你获取到的坐标所在坐标系跟地图数据是不是相匹配的. 常用的地图SDK:高德地图使用的是GCJ-02(也就是火星坐标系),百度使用的是BD-09百度坐标系 ...
- PHP 学习笔记 (一)
1. 在PHP中设置最长执行时间: PHP中的PHP.ini文件中,max_execution_time 项指定了PHP最长执行时间,默认是30秒.有两种方案可以对其进行修改: 1. 直接在PHP.i ...
- LBP特征提取实现
捯饬了一两天才搞好! 在lbp.m下输入下面代码,运行结果如图: 代码: I=imread('rice.png'); mapping=getmapping(8,'u2'); H1=lbp(I,1,8, ...
- 简单的背包变形HDU1203,HDU2955
今天一直在写背包,不过中间停了一段时间在写shell. 一直在做01背包.今天做了这两题很相似的背包 首先是HDU1203 Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要 ...
- c++primerplus(第六版)编程题——第4章(复合类型)
声明:作者为了调试方便,每一章的程序写在一个工程文件中,每一道编程练习题新建一个独立文件,在主函数中调用,我建议同我一样的初学者可以采用这种方式,调试起来会比较方便. (具体方式参见第3章模板) 1. ...
- 实现基于Memcache存储的Session类
自主实现Session功能的类,基于文件方式存储Session数据,测试基本通过,还比较好玩,实际应用没有意义,只不过是学习Session是如何实现的. 使用基于文件的Session存取瓶颈可能都是在 ...
- phpmailer{群发并且发送附件}
PHPMailer是一个用于发送电子邮件的PHP函数包. 第一,需要下载PHPMailer文件包phpmailer. http://phpmailer.sourceforge.net/ 第二, ...
- MFC中控件的TAB顺序 ----转载
在MFC中添加控件后,按Ctrl+d可以改变控件TAB顺序,怕自己忘了,一个神奇的东西,记下. 关于改变Tab顺序的方法有以下几种: 方法一:在动态创建控件的时候STYLE设置成为WS_CHILD|W ...
- [Machine Learning] 梯度下降(BGD)、随机梯度下降(SGD)、Mini-batch Gradient Descent、带Mini-batch的SGD
一.回归函数及目标函数 以均方误差作为目标函数(损失函数),目的是使其值最小化,用于优化上式. 二.优化方式(Gradient Descent) 1.最速梯度下降法 也叫批量梯度下降法Batch Gr ...