一、让自己习惯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. P6672-[清华集训2016]你的生命已如风中残烛【结论】

    正题 题目链接:https://www.luogu.com.cn/problem/P6672 题目大意 长度为\(m\)的序列\(a\),有\(n\)个数字不是\(0\),其他\(m-n\)个是\(0 ...

  2. P3273-[SCOI2011]棘手的操作【线段树,并查集】

    正题 题目链接:https://www.luogu.com.cn/problem/P3273 题目大意 \(n\)个点有权值,要求支持操作 连接两个点 单点加权 联通块加权 全图加权 单点询问 联通块 ...

  3. PyTorch中的Batch Normalization

    Pytorch中的BatchNorm的API主要有: 1 torch.nn.BatchNorm1d(num_features, 2 3 eps=1e-05, 4 5 momentum=0.1, 6 7 ...

  4. FastAPI(58)- 使用 OAuth2PasswordBearer 的简单栗子

    背景 假设在某个域中拥有后端 API(127.0.0.1:8080) 并且在另一个域或同一域的不同路径(或移动应用程序)中有一个前端(127.0.0.1:8081) 并且希望有一种方法让前端使用用户名 ...

  5. 微信小程序访问豆瓣api报403错误解决方法

    通过豆瓣API可以获取很多电影.书籍的数据信息,今天在调用豆瓣正在上映电影接口的时候报403错误,原因是豆瓣设置了小程序的访问权限.如下: 解决方法是使用代理,将豆瓣API地址换成 https://d ...

  6. Idea进行java应用的远程调试Remote debugging

    本文可以解决如下两个问题: 1.如何处理和调试那些只发生在生产环境(或其他远程环境)而本地开发环境可能没办法重现的"问题". 2.只有一个可以部署的war/jar包,只有class ...

  7. FastAPI 学习之路(十一)请求体 - 嵌套模型

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

  8. Intellij IDEA使用姿势

    Intellij IDEA 智能补全的 10 个姿势,太牛逼了.. Intellij Idea非常6的10个姿势

  9. 【Python从入门到精通】(二)怎么运行Python呢?有哪些好的开发工具(PyCharm)

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 这是Pyhon系列文章的第二篇,本文主要介绍如何运行Python程序以及安装PyCharm开发工具. 干货满满,建议收藏,需要用到时常看看. 小伙 ...

  10. kivy浮点布局

    from kivy.app import App from kivy.uix.floatlayout import FloatLayout class FloatLayoutWidget(FloatL ...