歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++空白基類最優化(EBO或EBCO)

對於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++標准所規定必須的,但是大部分編譯器都會這麼做。
Copyright © Linux教程網 All Rights Reserved