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

阅读全文 »

Analysis of Virtual Memory Page Fault Exception

考虑这样一个问题:能否通过管道(fifo)从一个进程A向另一个进程B(A和B之间并无亲属关系)中传递A进程中对象的地址,从而在进程B中访问到A进程的对象呢?

阅读全文 »

Iterator Invalidation of STL Containers

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

阅读全文 »

A brief discussion on fork/vfork

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

阅读全文 »

Main-function prototype verification and program termination behavior

在C和C++中流传着很多版本的main函数原型,不同的书里也有不同的写法。今天我从几种标准(C89/99/11以及C++98/03/11/14)的角度来寻找一下什么是“标准行为”以及在主函数中return后发生了什么。

阅读全文 »

Incompatibilities between C and C++

之前提到过数次C和C++并不是一个语言,就算是C++中从C继承来的那部分也和ISO C有很大区别,以后我会逐渐整理一些它们之间不兼容的特性到这里来。

阅读全文 »

The difference between declaration and define in C++

看过不少C++的书籍里都没有明确地指出处声明(declaration)与定义(define)的区别,或者只是提到了需要支持分离式编译,使用extern specifier的就是声明,不带的就是定义。实际上我觉得C++标准中对于声明(declaration)与定义(define)的区别描述的更为清晰。

阅读全文 »

C++ object construction and destruction order

通过一道CppQuiz的题来使用C++14标准描述C++的对象在继承情况下构造和析构的顺序,以及在对象构造/析构时抛出异常。

阅读全文 »