既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
- 当编译器在引用折叠环境中生成引用的引用时,结果就会成为单引用。如果原始的引用有一个是左值引用,则结果就是左值引用,否则就是右值引用。
- 通用引用是右值引用的情况有,类型推导可以区分左值和右值时,以及发生引用折叠。
29:假定移动操作存在,不是廉价的,也不是可用的
- 假定移动操作存在,不是廉价的,也不是可用的。
- 已知类型或支持移动语义类型的代码中,不需要有待定。
30:熟悉完美转发失败案例
- 如果模板类型推导失败或推导出错误的类型时,完美转发就会失败。
- 导致完美转发失败的参数类型有括号初始化器,使用0或NULL的指针,整型变量静态数据成员的声明,模板和重载函数名称,位成员。
31:避免默认的捕捉模式
- 默认的传引用操作捕捉会导致悬空引用。
- 默认的传值操作捕捉容易受悬空指针影响,并且会误导成lambdas是自包含的。
32:使用init捕捉来移动对象到闭包
- 使用C++14的init捕捉来移动对象到闭包。
- C++11中,通过手写的类或std::bind来模仿init捕捉。
33:使用decltype调用std::forward移动auto&&参数
- 使用decltype调用std::forward移动auto&&参数。
34:优先使用lambdas,而不是std::bind
- Lambdas更容易阅读,更快捷,并且比std::bind更高效。
- 只有在 C++11中,std::bind在实现移动捕捉或绑定对象到模板化的函数调用操作符上可能会有用。
35:优先使用基于task的编程方法,而不是基于thread(相关的类)
- std::thread API从异步运行函数中得到非直接的结果,如果函数抛出异常,则程序终止。
- 基于Thread的编程方法调用需要手工管理线程耗尽、过度订阅、负载均衡,以及适应新平台等问题。
- 基于Task的编程方法通过std::async使用默认加载策略来处理大多数的问题。
36:如果需要异步处理,请指定std::launch::async
- std::async的默认加载策略既允许异步执行,也允许同步的执行。
- 灵活性也会导致访问thread_local时产生不确定性,线程也许永远不会执行,也会影响基于超时等待调用的程序逻辑。
- 如果需要异步处理,请指定std::launch::async。
37:使std::threads在任何路径下都是不能join的
- 使std::threads在任何路径下都是不能join的。
- 在析构函数上join会导致难以调试的性能问题。
- 在析构函数上detach会导致难以调试的未定义行为。
- 将std::thread对象作为数据成员列表项中的最后一个。
38:要小心不同的线程句柄析构行为
- Future的析构函数通常只会销毁future的数据成员。
- 涉及到非延期task的共享状态的final future是通过std::async,在task完成后加载的。
39:考虑对于一次性事件通信中使用void future
- 对于简单的事件通信,基于condvar的设计需要一个多余的互斥量,对检测和响应任务的相应进度施加限制,并且需要任务验证事件是否已发生。
- 设计使用一个标记来避免这些问题,但这是基于轮询的,而不是基于阻塞的。
- condvar和标记可以一起使用,但结果通信机制会有点不自然。
- 使用std::promises和futures来回避这些问题,但是这种方法使用堆内存来处理共享状态,并且只能用于一次性通信。
40:使用std::atomic处理并发,使用volatile处理特殊内存
- std::atomic用来在不使用mutex的多线程情形下访问数据。它是编写并发软件的一个工具。
- volatile用来在读写操作不是优化的方式下处理内存。它是编写处理特殊内存的一个工具。
41:考虑使用传值来处理移动操作很廉价而且总是被拷贝的参数
- 对于能够拷贝,移动操作很廉价而且总是被拷贝的参数,传值跟传引用基本上同样高效,而且更容易实现,产生更少的代码。
- 通过构造函数拷贝参数可能比通过复制操作符拷贝参数更加高昂。
- 传值操作会有切片问题,所以一般对于基类参数类型不适合。
42:考虑使用emplace的函数,而不是insert函数
- 原则上,emplace的函数有时应该比插入函数效率更高,而且效率永远不会降低。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**