This commit is contained in:
Qv Junping 2019-03-29 16:52:05 +08:00
parent cbf4bb3133
commit 03f427f6a5
2 changed files with 14 additions and 14 deletions

View File

@ -121,13 +121,13 @@ int* const function7(); // 返回一个指向变量的常指针使用i
```cpp
// 声明1加 inline建议使用
inline int functionName(int first, int secend,...);
inline int functionName(int first, int second,...);
// 声明2不加 inline
int functionName(int first, int secend,...);
int functionName(int first, int second,...);
// 定义
inline int functionName(int first, int secend,...) {/****/};
inline int functionName(int first, int second,...) {/****/};
// 类内定义,隐式内联
class A {
@ -1227,7 +1227,7 @@ class doSomething(Flyable *obj) // 做些事情
39. 明智而审慎地使用 private 继承private 继承意味着 is-implemented-in-terms-of根据某物实现出尽可能使用复合当 derived class 需要访问 protected base class 的成员,或需要重新定义继承而来的时候 virtual 函数,或需要 empty base 最优化时,才使用 private 继承)
40. 明智而审慎地使用多重继承(多继承比单一继承复杂,可能导致新的歧义性,以及对 virtual 继承的需要,但确有正当用途,如 “public 继承某个 interface class” 和 “private 继承某个协助实现的 class”virtual 继承可解决多继承下菱形继承的二义性问题,但会增加大小、速度、初始化及赋值的复杂度等等成本)
41. 了解隐式接口和编译期多态class 和 templates 都支持接口interfaces和多态polymorphismclass 的接口是以签名为中心的显式的explicit多态则是通过 virtual 函数发生于运行期template 的接口是奠基于有效表达式的隐式的implicit多态则是通过 template 具现化和函数重载解析function overloading resolution发生于编译期
42. 了解 typename 的双重意义(声明 template 类型参数是,前缀关键字 class 和 typename 的意义完全相同;请使用关键字 typename 标识嵌套从属类型名称但不得在基类列base class lists或成员初值列member initialization list内以它作为 basee class 修饰符)
42. 了解 typename 的双重意义(声明 template 类型参数是,前缀关键字 class 和 typename 的意义完全相同;请使用关键字 typename 标识嵌套从属类型名称但不得在基类列base class lists或成员初值列member initialization list内以它作为 base class 修饰符)
43. 学习处理模板化基类内的名称(可在 derived class templates 内通过 `this->` 指涉 base class templates 内的成员名称,或藉由一个明白写出的 “base class 资格修饰符” 完成)
44. 将与参数无关的代码抽离 templates因类型模板参数non-type template parameters而造成代码膨胀往往可以通过函数参数或 class 成员变量替换 template 参数来消除因类型参数type parameters而造成的代码膨胀往往可以通过让带有完全相同二进制表述binary representations的实现类型instantiation types共享实现码
45. 运用成员函数模板接受所有兼容类型请使用成员函数模板member function templates生成 “可接受所有兼容类型” 的函数;声明 member templates 用于 “泛化 copy 构造” 或 “泛化 assignment 操作” 时还需要声明正常的 copy 构造函数和 copy assignment 操作符)
@ -1863,7 +1863,7 @@ B树/B+树 |O(log<sub>2</sub>n) | |
* 锁机制:包括互斥锁/量mutex、读写锁reader-writer lock、自旋锁spin lock、条件变量condition
* 互斥锁/量mutex提供了以排他方式防止数据结构被并发修改的方法。
* 读写锁reader-writer lock允许多个线程同时读共享数据而对写操作是互斥的。
* 自旋锁spin lock与互斥锁类似都是为了保护共享资源。互斥锁是当资源被占用申请者进入睡眠状态而自旋锁则循环检测保持是否已经释放锁。
* 自旋锁spin lock与互斥锁类似都是为了保护共享资源。互斥锁是当资源被占用申请者进入睡眠状态而自旋锁则循环检测保持是否已经释放锁。
* 条件变量condition可以以原子的方式阻塞进程直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
* 信号量机制(Semaphore)
* 无名线程信号量
@ -2056,7 +2056,7 @@ int main()
> 本节部分知识点来自《计算机网络(第 7 版)》
计算机网络体系结构:
计算机网络体系结构:
![计算机经网络体系结构](images/计算机经网络体系结构.png)
@ -2080,7 +2080,7 @@ int main()
通道:
* 单向通道(单工通道):只有一个方向通信,没有反方向交互,如广播
* 双向交替通(半双工通信):通信双方都可发消息,但不能同时发送或接收
* 双向交替通(半双工通信):通信双方都可发消息,但不能同时发送或接收
* 双向同时通信(全双工通信):通信双方可以同时发送和接收信息
通道复用技术:

View File

@ -136,13 +136,13 @@ int* const function7(); // 返回一个指向变量的常指针使用i
```cpp
// 声明1加 inline建议使用
inline int functionName(int first, int secend,...);
inline int functionName(int first, int second,...);
// 声明2不加 inline
int functionName(int first, int secend,...);
int functionName(int first, int second,...);
// 定义
inline int functionName(int first, int secend,...) {/****/};
inline int functionName(int first, int second,...) {/****/};
// 类内定义,隐式内联
class A {
@ -1242,7 +1242,7 @@ class doSomething(Flyable *obj) // 做些事情
39. 明智而审慎地使用 private 继承private 继承意味着 is-implemented-in-terms-of根据某物实现出尽可能使用复合当 derived class 需要访问 protected base class 的成员,或需要重新定义继承而来的时候 virtual 函数,或需要 empty base 最优化时,才使用 private 继承)
40. 明智而审慎地使用多重继承(多继承比单一继承复杂,可能导致新的歧义性,以及对 virtual 继承的需要,但确有正当用途,如 “public 继承某个 interface class” 和 “private 继承某个协助实现的 class”virtual 继承可解决多继承下菱形继承的二义性问题,但会增加大小、速度、初始化及赋值的复杂度等等成本)
41. 了解隐式接口和编译期多态class 和 templates 都支持接口interfaces和多态polymorphismclass 的接口是以签名为中心的显式的explicit多态则是通过 virtual 函数发生于运行期template 的接口是奠基于有效表达式的隐式的implicit多态则是通过 template 具现化和函数重载解析function overloading resolution发生于编译期
42. 了解 typename 的双重意义(声明 template 类型参数是,前缀关键字 class 和 typename 的意义完全相同;请使用关键字 typename 标识嵌套从属类型名称但不得在基类列base class lists或成员初值列member initialization list内以它作为 basee class 修饰符)
42. 了解 typename 的双重意义(声明 template 类型参数是,前缀关键字 class 和 typename 的意义完全相同;请使用关键字 typename 标识嵌套从属类型名称但不得在基类列base class lists或成员初值列member initialization list内以它作为 base class 修饰符)
43. 学习处理模板化基类内的名称(可在 derived class templates 内通过 `this->` 指涉 base class templates 内的成员名称,或藉由一个明白写出的 “base class 资格修饰符” 完成)
44. 将与参数无关的代码抽离 templates因类型模板参数non-type template parameters而造成代码膨胀往往可以通过函数参数或 class 成员变量替换 template 参数来消除因类型参数type parameters而造成的代码膨胀往往可以通过让带有完全相同二进制表述binary representations的实现类型instantiation types共享实现码
45. 运用成员函数模板接受所有兼容类型请使用成员函数模板member function templates生成 “可接受所有兼容类型” 的函数;声明 member templates 用于 “泛化 copy 构造” 或 “泛化 assignment 操作” 时还需要声明正常的 copy 构造函数和 copy assignment 操作符)
@ -1868,7 +1868,7 @@ B树/B+树 |O(log<sub>2</sub>n) | |
* 锁机制:包括互斥锁/量mutex、读写锁reader-writer lock、自旋锁spin lock、条件变量condition
* 互斥锁/量mutex提供了以排他方式防止数据结构被并发修改的方法。
* 读写锁reader-writer lock允许多个线程同时读共享数据而对写操作是互斥的。
* 自旋锁spin lock与互斥锁类似都是为了保护共享资源。互斥锁是当资源被占用申请者进入睡眠状态而自旋锁则循环检测保持是否已经释放锁。
* 自旋锁spin lock与互斥锁类似都是为了保护共享资源。互斥锁是当资源被占用申请者进入睡眠状态而自旋锁则循环检测保持是否已经释放锁。
* 条件变量condition可以以原子的方式阻塞进程直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
* 信号量机制(Semaphore)
* 无名线程信号量
@ -2059,7 +2059,7 @@ int main()
> 本节部分知识点来自《计算机网络(第 7 版)》
计算机网络体系结构:
计算机网络体系结构:
![计算机经网络体系结构](images/计算机经网络体系结构.png)
@ -2083,7 +2083,7 @@ int main()
通道:
* 单向通道(单工通道):只有一个方向通信,没有反方向交互,如广播
* 双向交替通(半双工通信):通信双方都可发消息,但不能同时发送或接收
* 双向交替通(半双工通信):通信双方都可发消息,但不能同时发送或接收
* 双向同时通信(全双工通信):通信双方可以同时发送和接收信息
通道复用技术: