C++ Terminology Annotations

bitwise constness & logical constness

  1. bitwise constness,从一个类的底层来看,分配给它自身的地址所包含的东西是恒定的。只要没修改这些东西,我们就说,这个类具有 bitwise constness,从 C++ 语言的角度来说,我们实现的仅仅是 bitwise constness;
  2. logical constness,从人的逻辑直观来看,我们说一个东西是恒定不变的,那么和它相关的一切东西都不该发生改变。包括类所把持的 handles,它们指向的东西,也理应不被改变。但 logical constness 终究只能是我们的幻想罢了。

EBO

Empty Base Optimization, 空基类优化,一种 C++ 类编写者使用的优化技巧。

copy-and-swap

C++ 异常安全的基石(cornerstone)。这个策略就是先制造一份对象本身的副本,在副本上做一切你想做的修改,然后将这个副本和原对象交换。如是做的好处是:如果在修改过程中发生了 exception,我们保证原对象完完全全没有被修改,数据是可恢复的。我们这样做的前提是,我们有一个异常安全的 swap 函数。

vptr, vtbl

virtual pointer, virtual pointers table. 虚指针,虚表。一种广泛使用的 C++ 底层运行时多态实现方式。通过向子类中加入虚指针,指向虚表的特定位置,来帮助编译器判断我们应该调用哪个版本的虚函数。在大部分编译器中,虚函数会造成类的体积变大(一个指针的大小)。

pimpl

pointer to implementation, “以一个指针指向一个对象,内含真正数据”。我们一般在编写这样的类的时候要注意:1. 编写合适的 swap 函数;2. 注意不要泄露句柄(这里就和 bitwise constness 有关了)。

Data Corruption

数据败坏,嗯,例如… 指针/引用指向了一块非法内存,一块原对象已经被销毁掉的内存。