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