最近在读《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. SpringCloud---声明式服务调用---Spring Cloud Feign

    1.概述 1.1 Spring Cloud Ribbon.Spring Cloud Hystrix的使用几乎是同时出现的,Spring Cloud提供了一个更高层次的封装这2个工具类框架:Spring ...

  2. Unix_JDK安装及配置

    CentOS 下过程 JDK 在 CentOS 和 Ubuntu 下安装过程是一样的,所以这里不再讲 Ubuntu 系统下的安装 JDK 1.8 下载 此时(20170906)最新版本:jdk-8u1 ...

  3. Kubernetes单机安装部署

    系统环境: Ubuntu 16.04.2 LTS 软件环境: Docker 1.12.6 Go 1.8.3 Etcd 3.1.8 Flannel 0.7.1 Kubernetes master 1.7 ...

  4. Linux~win10上开启ubuntu子系统

    在进行win10之后,我们可以在它上面安装一个linux子系统,然后就可以使用linux了,你不需要安装虚拟机,也不需要安装双系统! 1 通过Win10任务栏中的Cortana搜索框搜索打开“启用或关 ...

  5. 【Qt开发】更改应用程序图标和任务栏图标

    说明 实际开发过程中,生成的应用文件不会用默认的图标,同时程序启动后任务栏的图标也需要修改,还有窗口的图标,这样显得程序不那么low.更改程序的图标有多种方式,基于Qt Creator或vs开发的方式 ...

  6. 【ExtJS】FormPanel 布局(一)

    准备工作,布置一个最简单的Form,共5个组件,都为textfield. Ext.onReady(function(){ Ext.create('Ext.form.Panel', { width: 5 ...

  7. 开启Unity项目中VS工程的属性面板

    https://www.cnblogs.com/CodeGize/p/7859656.html Unity生成的VS工程一般是无法打开属性面板的.但是事实上,如果使用VS for unity,通过配置 ...

  8. 九度oj题目1341:艾薇儿的演唱会

    题目1341:艾薇儿的演唱会(40分) 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:522 解决:237 题目描述: 艾薇儿今天来到了中国,她计划两天后在哈尔滨举行一场个人的演唱会.由于 ...

  9. PyQt5 应用在 TeamViewer 下无法使用全屏模式

    PyQt5 应用在 TeamViewer 下无法使用全屏模式 问题描述 使用 PyQt5 (版本为 5.7)中的 QtWebEngineView 构建的桌面应用,部署到远程机器(Windows 7 平 ...

  10. [转]微信小程序-template模板使用

    本文转自:http://blog.csdn.net/u013778905/article/details/59646241 如下图,我在做华企商学院小程序的时候,课程搜索结果页和课程列表页结构是完全一 ...