1. 程式人生 > >【C】sizeof(空結構體/空類)的大小

【C】sizeof(空結構體/空類)的大小

sizeof(空類/空結構體) = 1;

#include <iostream>  
using namespace std;  
  
// 空類  
class ClassA  
{  
};  
  
// 繼承空類的空類  
class ClassB : public ClassA  
{  
};  
  
// 空結構體  
struct StructC  
{  
};  
  
// 主函式  
int main()  
{  
    cout<<"A: "<<sizeof(ClassA)<<endl;  
    cout<<"B: "<<sizeof(ClassB)<<endl;  
    cout<<"C: "<<sizeof(StructC)<<endl;  
  
    return 0;  
} 

測試結果:

空類,沒有任何成員變數或函式,即沒有儲存任何內容;

但是由於空類仍然可以例項化,編譯器就需給它分配記憶體空間,來指示類例項的地址。

這裡編譯器預設分配了一個位元組(如:char),以便標記可能初始化的類例項,同時使空類佔用的空間也最少(即1位元組)。

深度探索c++物件模型中是這樣說的: 那是被編譯器插進去的一個char ,使得這個class的不同實體(object)在記憶體中配置獨一無二的地址。 也就是說這個char是用來標識類的不同物件的。