.jpg)
书: https://pan.baidu.com/s/15VfTw9eJ2MoiHktwswP0gw?pwd=tq5x
笔记如下:
一、C++设计哲学
- “C++的核心理念:零开销抽象(Zero-overhead Abstraction)——你无需为未使用的特性付出代价。”
- “支持多范式编程:过程式、面向对象、泛型、函数式,但需警惕‘瑞士军刀式’滥用。”
二、基础语法与类型系统
- “
auto
推导类型时,保留底层const属性,但忽略引用(需显式auto&
)。” - “
nullptr
替代NULL
或0
,解决重载函数中指针/整型歧义问题。”
三、面向对象
- “构造函数应建立类不变式(Class Invariant),析构函数释放所有资源(RAII)。”
- “虚函数(
virtual
)实现运行时多态,但模板(编译时多态)在性能敏感场景更优。”
四、模板与泛型
- “概念(Concepts, C++20)约束模板参数:
template<Number T>
比typename T
更清晰安全。” - “可变参数模板(Variadic Templates)支持类型安全的
printf
式函数,如std::format
。”
五、标准库精髓
- **“容器选择原则:
vector
:默认选择,缓存友好;map
/set
:有序关联;unordered_map
:哈希快速查找。”**
- “
std::string_view
(C++17)避免不必要的字符串拷贝,但需注意生命周期。”
六、并发与内存模型
- “
std::thread
与std::async
简化线程管理,但共享数据必须通过mutex
或原子变量保护。” - “内存模型(Memory Model)保证多线程中操作的可见性与顺序性,
std::atomic
是关键。”
七、现代C++特性
- “移动语义(Move Semantics):
std::move
将左值转为右值,避免深拷贝(如vector
扩容)。” - “结构化绑定(Structured Binding, C++17):
auto [x,y] = point;
解构元组或结构体。”
八、错误处理
- “异常(Exception)应用于不可恢复的错误,而非常规控制流(性能代价高)。”
- “
noexcept
声明函数不抛异常,帮助编译器优化(如vector
移动操作)。”
九、代码组织
- “模块(Modules, C++20)替代头文件(
#include
),减少编译时间与宏污染。” - “命名空间(
namespace
)防止符号冲突,内联命名空间(inline namespace
)支持ABI兼容。”
十、学习建议
- **“掌握C++的层次:
- 初级:语法与标准库;
- 中级:RAII、模板、并发;
- 高级:内存模型、元编程、优化。”**
- “C++的复杂性源于其解决现实问题的广度,而非设计缺陷——理解背后取舍是关键。”