Effective C++ 总结笔记(一)
一、让自己习惯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.确定对象被使用前已被初始化
- 为内置型对象进行手工初始化;内置类型以外,构造函数负责初始化责任
- 不要混淆赋值于初始化。
- 对于构造函。数初始化,最好使用成员初值列初始化,这样有时候绝对必要,往往比赋值高效。初值列列出的成员变量,其排列次序应与他们在class中的声明次序相同。

因为赋值操作会多出一个default构造函数先对内部成员变量赋初值,然后再立即赋值,使用成员初值列替换赋值动作会更高效。
4. 不同编译单元的non-local static对象初始化相对次序并无明确定义,将每个non-local static对象搬到自己的专属函数对象里(该对象在此函数内被声明为static),以local对象替换。原因在于C++保证,函数内的local static对象会在该函数被调用期间首次遇上该对象定义式时被初始化。
Effective C++ 总结笔记(一)的更多相关文章
- Effective STL 读书笔记
Effective STL 读书笔记 标签(空格分隔): 未分类 慎重选择容器类型 标准STL序列容器: vector.string.deque和list(双向列表). 标准STL管理容器: set. ...
- Effective STL读书笔记
Effective STL 读书笔记 本篇文字用于总结在阅读<Effective STL>时的笔记心得,只记录书上描写的,但自己尚未熟练掌握的知识点,不记录通用.常识类的知识点. STL按 ...
- Effective STL 学习笔记 39 ~ 41
Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- 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 ...
- Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...
- Effective STL 学习笔记 32 ~ 33
Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 31:排序算法
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 Item 30: 保证目标区间足够大
Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...
- 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 ...
- Effective STL 学习笔记: Item 22 ~ 24
Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...
随机推荐
- Linkerd stable-2.11.0 稳定版发布:授权策略、gRPC 重试、性能改进等!
公众号:黑客下午茶 授权策略 Linkerd 的新服务器授权策略(server authorization policy)功能使您可以细粒度控制允许哪些服务相互通信.这些策略直接建立在 Linkerd ...
- Java中JDK、JRE和JVM三者之间有什么区别和联系?Java基础!
任何语言或软件都需要一个运行环境.正如人想生活在空气中,鱼想生活在水中一样,喜荫植物不能暴露在阳光下,任何物体个体的存在都离不开其所需的环境,编程语言也是一样的. 接下来就详细描述一下Java中JDK ...
- 使用 PyTorch Lightning 将深度学习管道速度提高 10 倍
前言 本文介绍了如何使用 PyTorch Lightning 构建高效且快速的深度学习管道,主要包括有为什么优化深度学习管道很重要.使用 PyTorch Lightning 加快实验周期的六种 ...
- 洛谷4103 HEOI2014大工程(虚树+dp)
又是一道虚树好题啊 我们建出来虚树,然后考虑dp过程,我们分别令\(sum[x],mndis[x],mxdis[x],size[x]\)为子树内的路径长度和,最短链,最长链,子树内关键点个数. 对于一 ...
- poj1248 (线性筛欧拉函数)(原根)
强烈鸣谢wddwjlss 题目大意:给出一个奇素数,求出他的原根的个数,多组数据. 这里先介绍一些基本性质 阶 设\((a,m)=1\),满足\(a^r \equiv 1 \pmod m\)的最小正整 ...
- C#开发BIMFACE系列47 IIS部署并加载离线数据包
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在前两篇博客<C#开发BIMFACE系列45 服务端API之创建离线数据包>与<C#开发BIMFACE系 ...
- ThreadLocal部分源码分析
结构演进 早起JDK版本中,ThreadLocal内部结构是一个Map,线程为key,线程在"线程本地变量"中绑定的值为Value.每一个ThreadLocal实例拥有一个Map实 ...
- 【UE4 C++】Slate 初探: Editor UI 与 Game UI
概述 名词区分 Slate Slate 是完全自定义.与平台无关的UI框架 应用 可用于编辑器UI,编辑器的大部分界面都是使用 Slate 构建的 可做为游戏UI 可作为独立应用开发 只能 C++ 开 ...
- [技术博客] 敏捷软工——JavaScript踩坑记
[技术博客] 敏捷软工--JavaScript踩坑记 一.一个令人影响深刻的坑 1.脚本语言的面向对象 面向对象特性是现代编程语言的基本特性,JavaScript中当然集成了面向对象特性.但是Java ...
- TVS管性能及选型总结
https://wenku.baidu.com/view/5b5bda5526fff705cc170af8.html