最近在读《Effective C++》,确实是经典之作,但是有的条款也需要一些细节补充,所以都列在这篇文章里,希望能不断更新,个人阅读的是第三版,不包括C++ 11的内容。

条款1:视C++为一个语言联邦。

主要可分为4个次语言(sublanguage),C的部分,OOP的部分,template部分以及标准库STL。都有各自不同的习惯,用哪块就用哪块的规范。

目前比较熟悉的是c的那部分和oop的那部分,tSTL, emplete的那部分正在学习,确实感觉到了风格和规范有所不同,所以之后可能需要分开进行对比。

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

这点也没什么好说的,#define只是做单纯的文本展开,其中如果有++x这样的指令会有严重的副作用,所以尽量用其他三者作为其原有功能的替 代,另外c99也认可了#inline,不过还是要明确const定义的常量和#define定义的常量的区别,前者编译时是一个symbol,后者就是 一个字面值。

条款3:尽可能使用const。

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

注意构造函数的初始化列表和赋值的区别,不同编译单元之间的non-local static变量的定义顺序是未定义的,所以最好用local static对象来替代类似的访问呢。

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

合成的构造函数,copy构造函数,析构函数和copy assignment函数。

条款6:若不想使用编译器自动生成的函数,就该明确拒绝。

将相应的合成的成员函数声明为private并且不定义,另外继承一个把copy assignment函数和copy构造函数声明为私有的类可以让编译器在用户欲拷贝派生类时报错。因为基类的copying函数不允许继承类调用,而调 用基类的copying函数是合成的派生类copying函数的默认行为。

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

含有virtual成员函数的基类应该也将析构函数声明为virtual的。

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

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

因为在构造和析构函数中,base class构造期间virtual函数绝对不会下降到derived classes阶层。在derived class对象的base class构造期间,对象的类型是base class而不是derived class。一旦derived class析构函数开始执行,对象内的derived class成员便呈现未定义值,所以C++视它们仿佛不再存在,进入base class析构函数后对象就成为一个base class对象。

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

因为这样方便了链式赋值的处理(a = b = c = d,优先级相同,结合性从右往左,所以 a = (b = (c = d)),标准库),而operator=是单目操作符重载,其左值隐式参数为*this,即自身,所以return *this收尾,哦这个标准是习惯,非强制,只是觉得还是保持同一个习惯比较好。

《effective c++》读书笔记(上)的更多相关文章

  1. 编写可维护的Javascript读书笔记

    写在前面:之前硬着头皮参加了java方面的编程规范培训,收货良多,工作半年有余的时候,总算感觉到一丝丝Coding之美,以及造轮子的乐趣,以至于后面开发新功能的时候,在Coding style方面花了 ...

  2. 《编写可维护的JavaScript》 笔记

    <编写可维护的JavaScript> 笔记 我的github iSAM2016 概述 本书的一开始介绍了大量的编码规范,并且给出了最佳和错误的范例,大部分在网上的编码规范看过,就不在赘述 ...

  3. 编写可维护的javascript阅读笔记

    格式 变量 变量命名, 采取小驼峰大小写 变量使用名词, 函数前缀为动词 局部变量应统一定义在函数的最上面, 而不是散落在函数的任意角落. 赋初始值的定义在未赋初始值的变量的上面. 我个人建议不使用单 ...

  4. 读《编写可维护的javascript》笔记

    第一章 基本的格式化 缩进层级:推荐 tab:4; 换行:在运算符后面换行,第二行追加两个缩进: // Good: Break after operator, following line inden ...

  5. 《编写可维护的javascript》读书笔记(上)

    最近在读<编写可维护的javascript>这本书,为了加深记忆,简单做个笔记,同时也让没有读过的同学有一个大概的了解. 一.编程风格 程序是写给人读的,所以一个团队的编程风格要保持一致. ...

  6. 《编写可维护的javascript》读书笔记(中)——编程实践

    上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...

  7. 【读书笔记】读《编写可维护的JavaScript》 - 编程实践(第二部分)

    本书的第二个部分总结了有关编程实践相关的内容,每一个章节都非常不错,捡取了其中5个章节的内容.对大家组织高维护性的代码具有辅导作用. 5个章节如下—— 一.UI层的松耦合 二.避免使用全局变量 三.事 ...

  8. 编写可维护的JavaScript代码(部分)

    平时使用的时VS来进行代码的书写,VS会自动的将代码格式化,所有写了这么久的JS代码,也没有注意到这些点.看了<编写可维护的javascript代码>之后,做了些笔记. var resul ...

  9. 推荐一本好书:编写可维护的JavaScript(可下载)

    目录 推荐一本好书:编写可维护的JavaScript(可下载) 书摘: 下载: 有些建议: 推荐一本好书:编写可维护的JavaScript(可下载) 书摘: 很多设计模式就是为了解决紧耦合的问题.如果 ...

  10. 拯救一切强迫症 - 读《编写可维护的 JavaScript》(一)

    拯救一切强迫症 - 读<编写可维护的 JavaScript>(一) 本文写于 2020 年 4 月 24 日 我在小学的时候就有接触过编程,所以读大一的时候 C 语言还算是轻车熟路.自然会 ...

随机推荐

  1. ngx_echo_module

    https://github.com/openresty/echo-nginx-module echo $echo_request_body

  2. SAP Sybase IQ 操作基础

    1.启动 source IQ-16_0.sh 命令行查看安装程序是否成功 start_iq -v2 2.数据库.表空间 start_iq -n utility_db dbisql -c 'uid=db ...

  3. 06-oracle 通用函数

    --nvl(数字|列名,默认值) 数字或列的值为null显示为0,不为null时显示原值 --nvl2(comm,comm,0)如果comm不为null则显示comm,为null则显示0 --null ...

  4. python学习-基础知识-1

    1.计算机历史 计算机使用高低电压的两种状态来描述信息.计算机可以理解的只有二进制数据即010100011....,1个比特位可以表示的状态只有2种,n个比特位可以表示的状态有2的n次方种. 所以如果 ...

  5. redis和memcache缓存击穿,缓存失效问题

    我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 一.缓存穿透 Paste_Image.png Paste_Image.png ...

  6. render函数的使用

    render函数的几种使用方法最近使用element-ui的tree组件时,需要在组件树的右边自定义一些图标,就想到了用render函数去渲染. <el-tree class="p-t ...

  7. Java入门系列-23-NIO(使用缓冲区和通道对文件操作)

    NIO 是什么 java.nio全称java non-blocking(非阻塞) IO(实际上是 new io),是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(bo ...

  8. Word 只读模式修改

    一.设置只读模式: 方法一: 打开目标文件,点击另存为,如下: 2.点击常规选项,勾选‘建议以只读方式打开文档,也可以在此页给文档加密: 方法二: 在工具栏-->审阅--->限制编辑: 二 ...

  9. Delphi下OpenGL2d绘图(01)-初始化

    一.前言: Delphi默认支持OpenGl,可以uses OpenGL单元进行引用,便可以使用OpenGL的函数.OpenGl是跨平台的,而且Windows很早就支持并集成在系统中,存在于syste ...

  10. sublime text 3 主题更换

    1.安装colorsublime,里面收藏了大量的主题 2.要选择主题的时候,Ctrl+Shift+P 打开Package Control,输入color,如图 3.Enter,进入选择列表,键盘上下 ...