空基類優化

物件不能佔用少於 1 個位元組,因為這種型別的陣列的成員將具有相同的地址。因此,sizeof(T)>=1 總是成立。派生類也不能小於其任何基類。但是,當基類為空時,其大小不一定會新增到派生類中:

class Base {};

class Derived : public Base
{
public:
    int i;
};

在這種情況下,不需要在 Derived 中為 Base 分配一個位元組,以便為每個物件的每種型別分配一個不同的地址。如果執行空基類優化(並且不需要填充),則 sizeof(Derived) == sizeof(int),即,不對空基進行額外分配。這也適用於多個基類(在 C++中,多個基數不能具有相同的型別,因此不會產生任何問題)。

請注意,只有當 Derived 的第一個成員的型別與任何基類不同時,才能執行此操作。這包括任何直接或間接的共同基礎。如果它與其中一個基礎(或者有一個公共基礎)的型別相同,則至少需要分配一個位元組,以確保相同型別的兩個不同物件不具有相同的地址。