摘要:5. 优先使用auto而非显示类型声明 在C++之中,使用auto关键字声明类型可以将程序员从输入繁琐的类型中解放出来,编译器会自动推导出变量的实际类型。 使用auto关键字 在C++14中,lambda函数的参数都可以使用auto来定义。 在C++中, 的key的类型是const类型的,所以即便采 阅读全文
posted @ 2017-06-03 19:44 ZHOU YANG 阅读 (111) 评论 (0) 编辑
摘要:1. 理解模板类型推导 1. expr是 函数调用时,推导出的Param和T的类型如下: 需要特别注明的是,通过 的方式传入数组,数组的大小信息不会丢失。 在类型推导期间,数组和函数将退化为指针类型,除非他们是被初始化为引用。 2. expr是 在进行类型推导的时候,rx的引用性被忽略了。 3. p 阅读全文
posted @ 2017-06-02 21:37 ZHOU YANG 阅读 (80) 评论 (0) 编辑
摘要:1. 使用细粒度锁和条件变量的线程安全队列 可以使用细粒度的锁来减小队列的临界区,这里使用了一个dummy node用来进一步减小锁的临界区。若要判断队列是否为空,只需要执行下述判断: 请注意,因为在进行push的时候需要修改tail,所以对tail的访问和修改都需要进行加锁。这里使用get_tai 阅读全文
posted @ 2017-05-30 21:32 ZHOU YANG 阅读 (808) 评论 (0) 编辑
摘要:C++ 原子类型 原子操作:一个不可分割的操作。 标准原子类型可以在头文件之中找到,在这种类型上的所有操作都是原子的。它们都有一个 的成员函数,让用户决定在给定类型上的操作是否用原子指令完成。唯一不提供 成员函数的类型是 ,在此类型上的操作要求是无锁的。可以利用 实现一个简单的锁。 C++ 11中的 阅读全文
posted @ 2017-05-29 00:56 ZHOU YANG 阅读 (2416) 评论 (0) 编辑
摘要:下列代码用于压缩和解压字符串,使用标准库string。实现了对zlib的简单封装。 阅读全文
posted @ 2017-03-25 15:24 ZHOU YANG 阅读 (553) 评论 (0) 编辑
摘要:一直以来,对于assert的实现总是不太理解,现在深入assert背后的代码,总算对assert的实现有了一个清醒的认识。 assert基于宏定义与宏展开实现。首先介绍一下assert的功能:它能够断言给定表达式是否为true。如果为true,则对应assert的代码会转换为 ,即一条空语句,ass 阅读全文
posted @ 2016-12-02 01:17 ZHOU YANG 阅读 (699) 评论 (0) 编辑
摘要:1. 介绍 Valgrind工具组提供了一套调试与分析错误的工具包,能够帮助你的程序工作的更加准确,更加快速。这些工具之中最有名的是 Memcheck 。它能够识别很多C或者C++程序中内存相关的错误,这些错误会导致程序崩溃或者出现不可预知的行为。 接下来会以最短的篇幅告诉你如何使用 Memchec 阅读全文
posted @ 2016-11-28 17:08 ZHOU YANG 阅读 (3732) 评论 (0) 编辑
摘要:字符串匹配的暴力解法 给定字符串s和p,寻找字符串p在字符串s中出现的位置,暴力解法如下所示: 如果当前字符匹配成功, ,继续匹配下一字符。 如果 与 匹配失败,令 ,即i转到上次首次匹配开头字符的下一位置,j从头开始。 k=len[k 1] k f e abeab e f str str str_ 阅读全文
posted @ 2016-11-22 19:23 ZHOU YANG 阅读 (313) 评论 (0) 编辑
摘要:make 要点简记 1.隐式推导 make可以自动推导文件及其文件依赖关系后面的命令,所以我们没有必要在每一个 .o 文件后面都写上类似的命令,因为make 会自动识别并且自动推导命令. 2.在规则中使用通配符 表示将object变量定义为所有.o文件组成的集合。在定义变量的时候,不能使用通配符,否 阅读全文
posted @ 2016-11-05 22:08 ZHOU YANG 阅读 (239) 评论 (0) 编辑
摘要:为什么建立TCP连接需要三次握手? 原因:为了应对网络中存在的延迟的重复数组的问题 例子: 假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达server。本来这是一个已经失效的连接报文,但是server接收到这个连接报文之后,误认为client发 阅读全文
posted @ 2016-10-30 00:15 ZHOU YANG 阅读 (5984) 评论 (1) 编辑