C++中各种空类以及继承空类后的sizeof大小

来源:互联网 发布:如何评价李沁长相知乎 编辑:程序博客网 时间:2024/06/06 09:51
#include <iostream>                                                                           

using namespace std;

class A1
{
};

class A2
{
};

class B1 : public A1
{
};

class B2 : public A1, public A2
{
};

class B3 : public virtual A1
{

};

class B4 : public virtual A1, public virtual A2
{
};

class B5 : public A1, public virtual A2
{
};  

class C1 : public A1
{
    char a;
    char b;
};

class C2 : public virtual A1
{
    char a;
    char b;
};


int main(int argc, char *argv[])
{
    cout << "sizeof(A1): " << sizeof(A1) << endl;
    cout << "sizeof(B1 : A1): " << sizeof(B1) << endl;
    cout << "sizeof(B2 : A1, A2): " << sizeof(B2) << endl;
    cout << "sizeof(B3 : virtual A1): " << sizeof(B3) << endl;
    cout << "sizeof(B4 : virtual A1, virtual A2): " << sizeof(B4) << endl;
    cout << "sizeof(B5 : A1, virtual A2): " << sizeof(B5) << endl;
    cout << "sizeof(C1 : A1): " << sizeof(C1) << endl;
    cout << "sizeof(C2 : virtual A1): " << sizeof(C2) << endl;

    return 0;
}                       


结果是:

sizeof(A1): 1
sizeof(B1 : A1): 1
sizeof(B2 : A1, A2): 1
sizeof(B3 : virtual A1): 4
sizeof(B4 : virtual A1, virtual A2): 4
sizeof(B5 : A1, virtual A2): 4

sizeof(C1 : A1): 2

sizeof(C2 : virtual A1): 8     //涉及到字节对其所以是8

由于virtual继承涉及到虚函数表(虚函数指针)所以sizeof为4



原创粉丝点击