不同于类模板,可以具有显式特化和局部特化(partial specializations),函数模板没有”局部特化”的概念,只有显式特化和重载。

阅读全文 »

“指向类成员的指针(Pointers to members)”,是一种在C++不常用的特性,但是这里使用术语“指针”略有不妥,因为它们并不包含地址,行为也不像指针。
本篇文章会通过LLVM-IR来分析clang中对于“指向类成员的指针”的实现方式,以及穿插C++14标准内定义的相关内容和涉及到的LLVM-IR的语法。

阅读全文 »

在上一篇文章(C/C++编译模型分析)中介绍了C和C++中编译和链接的成因和方式。接上篇文章的坑,本篇文章从extern "C"着手分析C和C++编译与链接模型中的不同点及其成因,主要为function overloadfunction signaturesname mangling三个部分。

阅读全文 »

C和C++均使用分离编译来支持多源文件模块化机制,但是为什么这么做以及如何做是个值得探讨的问题。本篇文章并非是讲述C和C++中如何才能产生不同链接的语法规则,而是分析下C/C++编译器是如何实现编译和链接模型的。

阅读全文 »

看了下在C中Array of length zero的用法,感觉脑洞大开啊。不过从标准角度(非编译器扩展)来说,这个特性只存在于C语言(C99之后),C++中是不存在的。先挖个坑,来分析一下。

阅读全文 »

容器的大小指的是容器中的元素数目;容器的容量指的是重新分配更多内存之前容器能够保存的元素数目。在改变大小或容量时,元素可能会移动到新的存储位置。这意味着指向元素的迭代器(以及指针或引用)可能会失效(即指向旧元素的位置)。
指向关联容器元素的迭代器只有当所指元素从容器中删除时(erase)才会失效。与之相反,指向顺序容器元素的迭代器当重新分配空间(resize()/reverse()push_back())或指向元素在容器中移动(如在前一个位置进行erase()或者insert())也会失效。

阅读全文 »

在*UNIX中可以通过fork/vfork来实现多进程编程,整理总结一下相关的知识。

阅读全文 »