對於C++中的一個空類
class X
{
};
事實上並不是空的,sizeof(X)並不等於0, 一般的結果是1。每個X的對象都有一個隱晦的1 bytes,是被編譯器安插進去的一個char,這樣可以使得這個class的兩個objects在內存中配置獨一無二的地址。
當X作為另一個類的成員時,如:
class A
{
public:
X x;
int a;
};
由於X占一個字節,int占4個字節,再加上編譯器的alignment調整,sizeof(Y) = 8。
但是當一個類繼承X時:
class Y : public X
{
public:
int a;
};
這時大部分編譯器對於sizeof(Y)的結果是4,而不是8。這就是所謂的空白基類最優化在(empty base optimization-EBO 或 empty base class opimization-EBCO)。在空基類被繼承後由於沒有任何數據成員,所以子類優化掉基類所占的1 byte。EBO並不是c++標准所規定必須的,但是大部分編譯器都會這麼做。