2017年1月24日
摘要: 之前写了一个char32_iterator,简单说就是封装一个string::const_iterator,在operator*的时候将它引用的utf-8序列转为utf-32编码的单个字符返回——这看上去很简单。平时各位在编程的过程中一定会遇到类似的需求:实现一个惰性的transform,在一个容器的每一个元素上应用一个转换函数,但不是立即应用,而是等到使用它的时候即时转换。这听起来就像C#的Li... 阅读全文
posted @ 2017-01-24 23:50 PointerSMQ 阅读(330) 评论(0) 推荐(0) 编辑
  2017年1月6日
摘要: 2017到了,回顾一下2016,基本上可以说是咸鱼的一年,没啥长进,没学啥新东西,看看2016的目标 2017年新的目标是什么呢 不能咸鱼了不能咸鱼了不能咸鱼了 阅读全文
posted @ 2017-01-06 11:06 PointerSMQ 阅读(235) 评论(1) 推荐(0) 编辑
  2016年8月16日
摘要: C语言本身提供了一种不甚明确的变量声明方式——基于使用的声明,如int *a,本质上是声明了*a的类型为int,所以得到了a的类型为指向int的指针。对于简单类型,这样声明并不会对代码产生多大的阅读障碍,而对于复杂的声明,比如标准库的signal函数签名,void (*signal( int sig 阅读全文
posted @ 2016-08-16 23:31 PointerSMQ 阅读(1552) 评论(0) 推荐(0) 编辑
  2016年7月7日
摘要: 这学期数据库课程,最后的大程是写一个MiniSQL的数据库实现,要求很简单,建删表,建删单值索引,支持主键和unique定义,支持最简单的select,只要支持3个类型:int,float,char(0~255)。最开始,考虑到数据库的运行时确定类型的特点,选择了运行时强大的C#,还能顺便集成进Linq。但是一周后发现C#操作对象二进制结构的能力几乎为0,在写BufferManager的时候也发现... 阅读全文
posted @ 2016-07-07 22:58 PointerSMQ 阅读(481) 评论(0) 推荐(0) 编辑
  2016年5月13日
摘要: 上一篇讲了这么多,其实说的就是一个事,return会被编译器重写成SetResult,所以如果我们的异步函数返回的是一个Task,代码就要改成这样: using System; using System.Runtime.CompilerServices; using System.Threading.Tasks; namespace StateMachineDemo { class P... 阅读全文
posted @ 2016-05-13 16:16 PointerSMQ 阅读(366) 评论(0) 推荐(0) 编辑
  2016年5月6日
摘要: 这一个系列的文章主要来讲 C# 中的语言特性 async-await 在语言层面的本质,我们都知道 await 是编译器进行了一个 rewrite,然而这个 rewrite 并不是直接 rewrite 成其他没有原生支持 await 的语言的 lambda 回调的形式,而是整个对方法进行了重写,下面就让我们来从最简单的方法,一步一步剖析 await 糖的工作机制。 一个 async 方法,就是你... 阅读全文
posted @ 2016-05-06 15:45 PointerSMQ 阅读(409) 评论(0) 推荐(0) 编辑
  2016年4月30日
摘要: 众所周知,大部分情况下,操作一个自动(栈)变量的速度是比操作一个堆上的值的速度快的。然而,栈数组的大小是在编译时确定的(不要说 C99 的VLA,那货的 sizeof 是运行时计算的),但是堆数组的大小在运行时确定,很自由。此外,栈空间比堆空间有限,前者只有几MB,而后者基本上就是你系统内存的大小。 阅读全文
posted @ 2016-04-30 21:57 PointerSMQ 阅读(1278) 评论(2) 推荐(0) 编辑
  2016年3月20日
摘要: C++是一个编译器会替你在背后做很多事情的语言,包括模板实例化,按需要创造隐式的构造函数,默认构造你没有显式构造的成员,按需进行隐式转换和饮食构造等等,如果没有彻底了解清楚,就容易被这些编译器背后做好的事情坑到,这个系列文章就来总结我在写C++时遇到的各种坑。 所谓隐式调用和默认实现的构造函数,当你写一个赋值语句的时候,编译器会首先检查两个类型又没有直接实现的赋值函数,然后检查赋值左右的类... 阅读全文
posted @ 2016-03-20 14:13 PointerSMQ 阅读(2179) 评论(3) 推荐(1) 编辑
  2016年3月6日
摘要: 所有的STL容器,都保存一个或默认,或由用户提供的allocator的实例,用来提供对象内存分配和构造的方法(除了std::array),这样的容器,被称作Allocator Aware Container。早期的STL,设计的尚不完善,各种实现之间不能相互兼容,这一点在侯捷的《STL源码剖析》中有 阅读全文
posted @ 2016-03-06 14:40 PointerSMQ 阅读(839) 评论(0) 推荐(0) 编辑
  2016年3月5日
摘要: vector的源码真是太长了,今天用了一个下午和一个晚上看和注释了前面的一千行左右 p.s.博客园的代码高亮真是太垃圾, 如果想要阅读带注释的源码,推荐粘贴到VS2015里,然后按ctrl+z取消自动格式化,用我格式化好的样子,并在最前面#include <vector>和using namespa 阅读全文
posted @ 2016-03-05 22:14 PointerSMQ 阅读(1030) 评论(0) 推荐(0) 编辑