看了下在C中Array of length zero
的用法,感觉脑洞大开啊。不过从标准角度(非编译器扩展)来说,这个特性只存在于C语言(C99之后),C++中是不存在的。先挖个坑,来分析一下。
虚拟存储器的缺页异常分析
考虑这样一个问题:能否通过管道(fifo)从一个进程A向另一个进程B(A和B之间并无亲属关系)中传递A进程中对象的地址,从而在进程B中访问到A进程的对象呢?
STL容器的迭代器失效
容器的大小指的是容器中的元素数目;容器的容量指的是重新分配更多内存之前容器能够保存的元素数目。在改变大小或容量时,元素可能会移动到新的存储位置。这意味着指向元素的迭代器(以及指针或引用)可能会失效(即指向旧元素的位置)。
指向关联容器元素的迭代器只有当所指元素从容器中删除时(erase)才会失效。与之相反,指向顺序容器元素的迭代器当重新分配空间(resize()
/reverse()
或push_back()
)或指向元素在容器中移动(如在前一个位置进行erase()
或者insert()
)也会失效。
通过IR代码来分析C++代码语义
IR代码是LLVM生成的Intermediate Code
。可以通过IR代码来分析编译器对我们所写的代码是如何解析并执行的,使得分析代码语义变得简洁明了。IR代码的语法语义可参考LLVM Language Reference Manual。
fork/vfork浅谈
在*UNIX中可以通过fork/vfork来实现多进程编程,整理总结一下相关的知识。
C/C++中的编程技巧及其概念
一些C++中比较能令人迷惑或者用法比较奇特的示例记录。
main原型考证及程序终止行为
在C和C++中流传着很多版本的main
函数原型,不同的书里也有不同的写法。今天我从几种标准(C89/99/11以及C++98/03/11/14)的角度来寻找一下什么是“标准行为”以及在主函数中return后发生了什么。
C和C++之间的不兼容
之前提到过数次C和C++并不是一个语言,就算是C++中从C继承来的那部分也和ISO C有很大区别,以后我会逐渐整理一些它们之间不兼容的特性到这里来。
C++中declaration与define的区别
看过不少C++的书籍里都没有明确地指出处声明(declaration)与定义(define)的区别,或者只是提到了需要支持分离式编译,使用extern
specifier的就是声明,不带的就是定义。实际上我觉得C++标准中对于声明(declaration)与定义(define)的区别描述的更为清晰。
对象的构造和析构顺序
通过一道CppQuiz的题来使用C++14标准描述C++的对象在继承情况下构造和析构的顺序,以及在对象构造/析构时抛出异常。