下面的代码在gcc和VC中的结果
#include <cstdio>
class A
{
public:
virtual void funcaa()
{
printf("class A %s\n",__func__);
}
};
class AA:virtual public A
{
public:
virtual void funcaa()
{
printf("class AA %s\n",__func__);
}
};
class B
{
public:
virtual void funcbb()
{
printf("class B %s\n",__func__);
}
};
class BB:public B
{
public:
virtual void funcbb()
{
printf("class BB %s\n",__func__);
}
};
class C
{
public:
void funccc()
{
printf("class C %s\n",__func__);
}
};
class CC:virtual public C
{
public:
void funccc()
{
printf("class CC %s\n",__func__);
}
};
int main(void)
{
A a;
a.funcaa();
AA aa;
aa.funcaa();
B b;
b.funcbb();
BB bb;
b.funcbb();
C c;
c.funccc();
CC cc;
cc.funccc();
printf("sizeof(A)=%d,sizeof(AA)=%d\n",sizeof(A),sizeof(AA));
printf("sizeof(B)=%d,sizeof(BB)=%d\n",sizeof(B),sizeof(BB));
printf("sizeof(C)=%d,sizeof(CC)=%d\n",sizeof(C),sizeof(CC));
return 0;
}
gcc中:
VC14(VS2015)中:
Why?