类模板和模板类
类模板
类模板:允许用户为类定义一种模式,使得类中的某些数据成员、默认成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义和用户自定义)。如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表一类 类
1 | template <class T> |
类模板
类模板:允许用户为类定义一种模式,使得类中的某些数据成员、默认成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义和用户自定义)。如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表一类 类
1 | template <class T> |
1 | C++标准里一个相关概念是自由存储区(free store),特指使用new 和 delete 来分配和释放内存的区域。一般而言,这是堆的一个子集。 |
栈展开
1 | 编译器会自动调用析构函数,包括在函数执行发生异常的情况。在发送异常时对析构函数的调用,专门的术语叫“栈展开”。如下面代码: |
自动类型推导,C++14开始,还有函数的返回类型。auto 并没有改变C++是静态语言这一事实,使用auto 的变量(或函数返回值)的类型仍然是编译时就确定了,只不过编译器能自动帮你填充而已。
auto 实际使用的规则类似于函数模板参数的推导规则。当你写了一个含有auto的表达式时,相当于把 auto 替换为模板参数的结果。如下:
template<typename T> f(T)
函数模板,结果为值类型template<typename T> f(const T&)
函数模板,结果为常左值引用类型
先看看概念
实现一个数入行迭代器
1 | #include <string> |
由于报文 Header 一般会携带”User Agent“、”Cookie“、”Accept“、”Server“ 等许多固定的头字段,多达几百字节甚至上千字节,但 Body 却经常只有几十字节(比如 Get 请求、204/301/304响应),而且很多的请求响应报文中有很多字段值都是重复的,非常浪费。因此压缩头部报文是应该的
HTTP2 开发了专门的“HPACK” 算法,专门为压缩 HTTP 头部定制的算法,与 gzip、zlib 等压缩算法不同,它是一个“有状态”的算法,需要客户端和服务器各自维护一份“索引表”,也可以说是“字典”(这有点类似 brotli),压缩和解压缩就是查表和更新表的操作。在客户端和服务器两端建立“字典”,用索引号表示重复的字符串,还采用哈夫曼编码来压缩整数和字符串,可以达到 50%-90% 的压缩率。
为了方便管理和压缩,HTTP/2 废除了原有的起始行概念,把起始行里面的请求方法、URI、状态码等统一转换成了头字段的形式,并且给这些“不是头字段的头字段”起了个特别的名字——“伪头字段”(pseudo-header fields)。而起始行里的版本号和错误原因短语因为没什么大用,顺便也给废除了。为了与“真头字段”区分开来,这些“伪头字段”会在名字前加一个“:”,比如“:authority” “:method” “:status”,分别表示的是域名、请求方法和状态码。那么 HTTP2 报文就简单了,全都是 K-V 形式的字段,于是 HTTP/2 就为一些最常用的头字段定义了一个只读的“静态表”。
c++11中 std::unique_lock :https://blog.csdn.net/fengbingchun/article/details/78638138
c++11中 std::condition_variable : https://blog.csdn.net/fengbingchun/article/details/73695596
c++11 中 std::lock_guard : https://blog.csdn.net/fengbingchun/article/details/78649260
std::lock_guard 和 std::unique_lock 区别:https://chhy2009.github.io/2018/09/23/c11concurrency/c11concurrency/
std::all_of :https://vimsky.com/examples/usage/stdall_of-in-cpp.html
第 46 章 Boost.Lockfree
https://theboostcpplibraries.com/boost.lockfree
filesystem学习:
https://blog.csdn.net/xhtchina/article/details/111386335
https://www.cnblogs.com/Lilu-1226/p/10773263.html
使用 boost 库获取文件夹下所有文件名字:https://www.cnblogs.com/hellowooorld/p/11382812.html
asio 学习:https://www.boost.org/doc/libs/1_71_0/doc/html/boost_asio/examples/cpp03_examples.html