摘要:
有时会在源码中或在写代码时在宏定义中用到 . 采用这种方式进行宏定义, 主要是为了防止出现以下错误 : do{}while(0) 1. 空的宏定义避免出现warnning . 2. 存在一个独立的操作, 可以进行变量定义, 进行比较复杂的实现 . 3. 若果出现在判断语句过后的宏, 这样可以作为一个 阅读全文
摘要:
在网络编程中, 经常会将网络字节转为本地字节或者将本地字节转为网络字节, 但是如果每次我们都是都通过 , 函数需要将10进制转为整数, 甚至还用将字符串转为整数, 再转为网络字节, 或者反过来都是很麻烦的. 还好linux都是提供很方便的函数让两者之间进行转换. 转换函数 linux提供了多种函数满 阅读全文
摘要:
计算机存储数据是按大端或者小端将数据保存在内存上. 一般处理器都只选择其中的一种, 通常 和`AMD IBM`公司的处理器. 小端储存 : | 0x1003 | 0x78 | | : | : | | 0x1002 | 0x56 | | 0x1001 | 0x34 | | 0x1000 | 0x12 阅读全文
摘要:
前言 在c语言中学的强制转换是用 来实现的; 而在c++中更多的是用 系列的关键字来告诉编译器我们需要转换的类型. c++引入这些关键字也是为了看代码的时候清晰明了, 每个关键字都有指定的功能. 下面我们就来分析这些关键字. case name关键字 1. static_cast 在编译期间完成类型 阅读全文
摘要:
引言 auto : 类型推导. 在使用c++的时候会经常使用, 就像在考虑STL时迭代器类型, 写模板的时候使用auto能少写代码, 也能帮助我们避免一些隐患的细节. auto初始化 1. 使用 型别推导要求 必须在定义时初始化 , 毕竟需要根据对象的类型推导左值对象的型别. 1. 但是 型别推导会 阅读全文
摘要:
前言 c++中使用到 的地方有很多, 而且 本身也针对不同的类型可能有不同的含义, 比如对指针就有顶层和底层. 本节就是探讨关于C++中 的在不同的地方不同表现或含义. const 关于const : 修饰的对象一旦创建一般就不能改变, 所以对于 对象必须进行初始化. 初始化时并不关心初始化对象的是 阅读全文
摘要:
前言 在分析 编程之前, 我们需要对模板参数类型 和`class traits`编程的核心. 如果你已经明白了两者, 那么你可以直接看下一篇了. 相同之处 一般对模板参数类型 和`class`认为是一样的. 这两者在参数类型中确实是一样的. 你可以写成 也可以写成 这两者都是一样的, 没有区别. 两 阅读全文
摘要:
前言 迭代器是将算法和容器两个独立的泛型进行调和的一个接口. 使我们不需要关系中间的转化是怎么样的就都能直接使用迭代器进行数据访问. 而迭代器最重要的就是对 和`operator `进行重载, 使它表现的像一个指针. 类型 迭代器根据移动特性和实施操作被分为5类 1. input iterator( 阅读全文
摘要:
前言 上一节只分析了第二级配置器是由多个链表来存放相同内存大小, 当没有空间的时候就向内存池索取就行了, 却没有具体分析内存池是怎么保存空间的, 是不是内存池真的有用不完的内存, 本节我们就具体来分析一下 内存池 static data template的初始化 这里代码注释写的很清楚了, 我就提取 阅读全文
摘要:
前言 第一级是直接调用 分配空间, 调用 释放空间, 第二级三就是建立一个内存池, 小于128字节的申请都直接在内存池申请, 不直接调用 和`free`. 本节分析第二级空间配置器, STL将第二级配置器设置为默认的配置器, 所以只要一次申请的空间不超过128字节就默认在内存池中申请空间, 超过才会 阅读全文