A tour of C++ 读书笔记
第一章:
C++只是个编译型语言,需要源文件编译成目标文件,再通过链接各种库到可执行文件
1.6 常量
const
const expr 这个代表是要在编译的时候估值,性能会有所增加吧
2.4 联合体(union)
联合体所有的成员都是分配在同一地址上面,所以联合体所占的空间是跟其自身内部成员所占容量最大的空间一致,因此联合体只能保持一个成员的值。标准库中有个类型叫做 variant.后面可以关注一下。
2.5 枚举(enum)
enum class Color{
red,
green,
blue
}
enum后面的class指名了这是个强类型的枚举,并且限定了这些枚举的作用域。enum class 有助于防止常量的误用。
3.5.1 异常
RAII的答题思路:让类的构造函数获取正常运作所需的全部资源,然后析构函数释放全部资源,这样资源的释放就可以有保障的隐式进行。
3.6.1 参数传递
关心性能的时候,通常对于小型的值传值,较大的值传引用,其中的小一般是指不超过两或者三个指针的容量;
3.6.2 值返回
看完全书之后需要重温这一段关于operator+
4.2.3 初始化容器
这个地方不用while循环而用for循环,是因为要把d的作用域限制在循环里面
static_cast const_cast reinterpret_cast dynamic_cast
4.3 抽象类型
继承后覆写虚函数的时候最好把override写上,以便理解与阅读。
内联函数其实也可以把inline加上,另外构造函数与析构函数最好不要写成内联函数,因为如果涉及继承的话就会先运行了基类的构造函数埋下雷。
虚函数与虚函数表
4.5 类层次
- 虚析构函数对于抽象类来说是必须的,因为操控派生类的对象通常是借助抽象基类提供的借口进行的,具体来说,他可能是通过基类的指针被销毁的。然后虚函数调用机制确保正确析构函数被调用。因为基类的析构函数是虚的,delete调用的是距离基类最远的派生类的那个。对象的构建是自下而上(从基类开始),而销毁通过析构函数“从顶到底”(从派生类开始)。
5.1.1 基本操作
=delete的用法,可用于屏蔽任何函数,不仅仅是基本成员函数。
5.1.2 类型转换
explicit:应该把explicit用于单参数的构造函数,除非有好理由不用他
5.2.1 容器复制
拷贝构造函数、拷贝赋值函数
5.2.2 容器转移
转移构造函数,这时候就会用到&&“右值引用”;
左值:可以出现在赋值左侧的东西;
右值:不能对其赋值的东西,比如函数调用返回的某个整数。这样右值引用就是一个没有其他人能为其赋值的东西,所以可以安全的“偷取”某值。
转移构造函数不接受const参数,因为要从其参数中把值移除
5.3 资源管理
定义构造函数、拷贝操作、转移操作和析构函数,程序员可以完全控制所持资源的生命周期。
6.2.1 受限模板参数
针对于模板这一块新加了个关键字Element
template<Element T>
其中Element是用来检测T的
8 字符串和正则表达式
10 输入输出
11 容器
vector,list,map...
12 算法
迭代器iterator作用就是分离算法和容器。不同类型的容器迭代器不一样。
13 实用功能
mutex scoped_lock
13.2.1 unique_ptr和shared_ptr
13.2.2 move()和forward()
13.4.3 pair和tuple
13.5.1 variant
variant通常是union显示应用的更安全,更便捷的替代品。
13.7 时间
13.8 函数适配
13.8.1 lambda表达式
13.8.2 mem_fn()
在lambda表达式被C++11引入之前,就是用mem_fn()及其等价物是把面向对象风格的调用转化到函数式风格的主要方式
13.8.3 function
function的用途:回调函数、将运算作为参数传递、传递函数对象。但是与直接的调用相比,会存在一些运行时的性能损耗,而且function作为函数对象无法参与函数重载。
13.9.2 类型谓词
<type_trait> is_class,is_arithmetic,is_pod,is_literal_type,has_virtuak_destructor,is_base_of
15 并发
thread mutex scoped_lock unique_lock condition_variable
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?