doc/docs/Effective-Modern-C++
sairate c34823a3bd docs(book): 添加现代 C++教程及相关代码
- 新增现代 C++ 教程的 Preface 章节,包括英文和中文版本
- 添加 C++ Primer 练习代码
- 新增 Learn C++ 教程的 C++ 开发简介章节
- 添加头文件解析文档
- 更新 mkdocs.yml,包含新教程的目录结构
- 修改项目设置,使用 Python 3.10环境
2025-07-06 14:46:58 +08:00
..

sort
sort
3

Effective Modern C++ 笔记

book

目录

第一章 型别推导

条款1理解模板型别推导

条款2理解auto型别推导

条款3理解decltype

条款4掌握查看型别推导结果的方法

第二章 auto

条款5优先选用auto而非显式型别声明

条款6当auto推导的型别不符合要求时使用带显式型别的初始化物习惯用法

第三章 转向现代C++

条款7在创建对象时注意区分()和{}

条款8优先选用nullptr,而非0或NULL

条款9优先选用别名声明而非typedef

条款10优先选用限定作用域的枚举型别而非不限作用域的枚举型别

条款11优先选用删除函数而非private未定义函数

条款12为意在改写的函数添加override声明

条款13优先选用const_iterator,而非iterator

条款14只要函数不会发射异常就为其加上noexcept声明

条款15只要有可能使用constexpr就使用它

条款16保证const成员函数的线程安全性

条款17理解特种成员函数的生成机制

第四章 智能指针

条款18使用std::unique_ptr管理具备专属所有权的资源

条款19使用std::shared_ptr管理具备共享所有权的资源

条款20对于类似std::shared_ptr但有可能空悬的指针使用std::weak_ptr

条款21优先选用std::make_unique和std::make_shared而非直接使用new

条款22使用Pimpl习惯用法时将特殊成员函数的定义放在实现文件中

第五章 右值引用、移动语义和完美转发

条款23理解std::move和std::forward

条款24区分万能引用和右值引用

条款25针对右值引用实施std::move针对万能引用实施std::forward

条款26避免依万能引用型别进行重载

条款27熟悉依万能引用型别进行重载的替代方案

条款28理解引用折叠

条款29假定移动操作不存在、成本高、未使用

条款30熟悉完美转发的失败情形

第六章 lambda表达式

条款31避免默认捕获模式

条款32使用初始化捕获将对象移入闭包

条款33对auto&&型别的形参使用decltype以std::forward之

条款34优先选用lambda式而非std::bind

第七章 并发API

35优先选用基于任务而非基于线程的程序设计

36如果异步是必要的则指定std::lauch::async

37使std::thread型别对象在所有路径皆不可联结

38对变化多端的线程句柄析构函数行为保持关注

39考虑针对一次性事件通信使用以void为模板性别实参的期值

40对并发使用std::atomic对特种内存使用volatile

第8章 微调

41针对可复制的形参在移动成本低并且一定会被复制的前提下考虑将其按值传递

42考虑置入而非插入