泛型编程是自 STL(标准模板库)纳入到 C++ 标准以后才逐渐流行起来的新范式,核心思想是“一切皆为类型”,或者说是“参数化类型”“类型擦除”,使用模板而不是继承的方式来复用代码,所以运行效率更高,代码也更简洁。
来自:01 | 重新认识C++:生命周期和编程范式
9 人划过
你要特别小心对象的析构函数,不要有非常复杂、严重阻塞的操作。一旦 shared_ptr 在某个不确定时间点析构释放资源,就会阻塞整个进程或者线程,“整个世界都会静止不动”(也许用过 Go 的同学会深有体会)。这也是我以前遇到的实际案例,排查起来费了很多功夫,真的是“血泪教训”。
来自:08 | smart_ptr:智能指针到底“智能”在哪里?
7 人划过
宏的展开、替换发生在预处理阶段,不涉及函数调用、参数传递、指针寻址,没有任何运行期的效率损失,所以对于一些调用频繁的小代码片段来说,用宏来封装的效果比 inline 关键字要更好,因为它真的是源码级别的无条件内联。
来自:03 | 预处理阶段能做什么:宏定义和条件编译
7 人划过
函数的执行过程是 const 的,不会修改对象的状态(即成员变量),也就是说,成员函数是一个“只读操作”。
来自:07 | const/volatile/mutable:常量/变量究竟是怎么回事?
7 人划过
C++ 里还有一种方法(C++ 11 之后),就是直接使用函数内部的 static 静态变量。C++ 语言会保证静态变量的初始化是线程安全的,绝对不会有线程冲突。
来自:20 | 设计模式(下):C++是怎么应用设计模式的?
6 人划过
在类成员变量初始化的时候(第 5 讲),目前的 C++ 标准不允许使用 auto 推导类型
来自:06 | auto/decltype:为什么要有自动类型推导?
5 人划过
for 循环体里会做很多事情,会由 if-else、break、continue 等语句组成很复杂的逻辑。
来自:13 | 五花八门的算法:不要再手写for循环了
5 人划过
免去了构造后再拷贝、转移的成本
来自:12 | 三分天下的容器:恰当选择,事半功倍
4 人划过
总的来说,要写好注释,你要时刻“换位思考”,设身处地去想别人怎么看你的代码,这样的话,上面的那些细则也就不难实施了。
来自:02 | 编码阶段能做什么:秀出好的code style
3 人划过
上层要避免依赖下层的实现细节,下层要反过来依赖上层的抽象定义
来自:19 | 设计模式(上):C++与设计模式有啥关系?
3 人划过
*精彩内容为该课程各文章中划线次数最多的内容
编辑推荐
讲师的其他课程
包含这门课的学习路径
C++工程师
7门课程 51.5w人学习
看过的人还看了