一、让自己习惯C++


01.视C++为一个语言联邦

c++是多重范型编程

语言,视c++包括4种次语言:

1:C

2:Object-Oreinted C++;

3:Template C++;

4:STL(template程序库,包括容器、迭代器、算法和函数对象)。

02.尽量以const,enum,inline替换#define

const:

定义常量指针,定义class专属常量

用#define直接替换导致名称从未被编译器看到,可能一些错误信息不能被检查出来。

const定义常量也可能比#define导致较小量的码

#define不重视作用域,故不提供封装性

enum:

取一个const的地址是合法的,但取一个enum的地址不合法

inline:

#define定义函数可能招致误用,最好用inline函数替换

注:

对于单纯常量,最好以const对象或enums替换#defines;

对于形似函数的宏,最好改用inline函数替换#defines。

03.尽可能使用const

令函数返回一个常量值,可以预防无意义的赋值动作

普通const

如果关键字const出现在星号左边,表示被指物是常量;如果出现在右边,表示指针自身是常量;如果出现在星号两边,表示两者都是常量。

Const 成员函数

1.使得 class接口容易被理解,得知哪个函数可以改动对象内容,而哪个不行。

2.使得操作const对象成为可能(pass-by-reference-to-const)

3.const对象只能访问const成员函数,而非const对象可以访问任意的成员函数

4.const成员函数不能修改对象的数据成员,const对象的成员变量不可以修改(mutable修饰的数据成员除外)

Non-const和const成员函数中避免重复

Const成员函数调用non-const成员函数是错误行为,但non-const成员函数可以调用const成员函数,可避免代码重复。

注:

两个成员函数如果只是常量性不同,是可以被重载的。

将某些东西声明为const可帮助编译器侦测出错误用法。Const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。

当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本避免代码重复。

04.确定对象被使用前已被初始化

  1. 为内置型对象进行手工初始化;内置类型以外,构造函数负责初始化责任
  2. 不要混淆赋值于初始化。
  3. 对于构造函。数初始化,最好使用成员初值列初始化,这样有时候绝对必要,往往比赋值高效。初值列列出的成员变量,其排列次序应与他们在class中的声明次序相同。

因为赋值操作会多出一个default构造函数先对内部成员变量赋初值,然后再立即赋值,使用成员初值列替换赋值动作会更高效。

4. 不同编译单元的non-local static对象初始化相对次序并无明确定义,将每个non-local static对象搬到自己的专属函数对象里(该对象在此函数内被声明为static),以local对象替换。原因在于C++保证,函数内的local static对象会在该函数被调用期间首次遇上该对象定义式时被初始化。

Effective C++ 总结笔记(一)的更多相关文章

  1. Effective STL 读书笔记

    Effective STL 读书笔记 标签(空格分隔): 未分类 慎重选择容器类型 标准STL序列容器: vector.string.deque和list(双向列表). 标准STL管理容器: set. ...

  2. Effective STL读书笔记

    Effective STL 读书笔记 本篇文字用于总结在阅读<Effective STL>时的笔记心得,只记录书上描写的,但自己尚未熟练掌握的知识点,不记录通用.常识类的知识点. STL按 ...

  3. Effective STL 学习笔记 39 ~ 41

    Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  4. Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value

    Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...

  5. Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据

    Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...

  6. Effective STL 学习笔记 32 ~ 33

    Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  7. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  8. Effective STL 学习笔记 Item 30: 保证目标区间足够大

    Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...

  9. Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor

    Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...

  10. Effective STL 学习笔记: Item 22 ~ 24

    Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...

随机推荐

  1. Unittest 框架之断言,你学会了吗??

    unittest断言 Python在 unittest.TestCase 类中提供了很多断言方法.断言方法检查你认为应该满足的条件是否确实满足.如果该条件确实满足,你对程序行为的假设就得到了确认,你就 ...

  2. FastAPI(38)- 模拟一个跨域场景

    同源策略 https://www.cnblogs.com/poloyy/p/15345184.html CORS https://www.cnblogs.com/poloyy/p/15345871.h ...

  3. Windows10 IIS Web服务器安装配置

    前言: 对于.NET开发者而已,IIS Web托管服务器应该是十分的熟悉的.对于刚安装Windows10的系统的用户而已Internet Information Services(IIS)功能是默认关 ...

  4. 踩坑系列《三》 java -version 报错出现Error occurred during initialization of VM java/lang/NoClassDefFoundError:

    之前导入一个项目,因为该项目Spring版本过低,只能适用于1.7版本,装了jdk1.7版本.安装配置好后,打开cmd窗口,执行 java -version 指令发现没像正常一样显示版本信息,而是报了 ...

  5. Java 将Word转为HTML的方法

    本文介绍如何在JAVA程序中将Word文档通过 Document.saveToFile() 方法转换为HTML文档.编辑代码前,参考如下环境配置,导入jar包. [程序环境] 1. IntelliJ ...

  6. vue 快速入门 系列 —— vue-router

    其他章节请看: vue 快速入门 系列 Vue Router Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌. 什么是路由 ...

  7. 如何通过云效Flow完成自动化构建—构建集群

    如何通过云效Flow完成自动化构建-构建集群,云效流水线Flow是持续交付的载体,通过构建自动化.集成自动化.验证自动化.部署自动化,完成从开发到上线过程的持续交付.通过持续向团队提供及时反馈,让交付 ...

  8. MySQL MHA 运行状态监控

    一 项目描述 1.1 背景 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA ...

  9. 1-Java继承中多态情况特性下变量,方法,静态方法的访问

    在Java继承下,多态特性下类成员访问情况 /* 在继承中,变量时静态的绑定的,非静态方法是动态的绑定的,静态方法是静态绑定的 */ class Parent{ int number = 11; pu ...

  10. FastAPI 学习之路(十三)Cookie 参数,Header参数

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...