#include <iostream>
#include <string>
using namespace std;
class A
{
public:
int a;
char c1;
};
class B : public A
{
char c2;
};
class C : public B
{
char c3;
};
int main()
{
cout << sizeof(A) << " " << sizeof(B) << " " << sizeof(C) << endl;
return 0;
}
输出:8 12 12
class A
{
int a;
char c1;
};
class B : public A
{
char c2;
};
class C : public B
{
char c3;
};
int main()
{
cout << sizeof(A) << " " << sizeof(B) << " " << sizeof(C) << endl;
return 0;
}
输出:8 8 8
这两段代码的差别就在于class A中的public限定符!
编译器是g++,还没在VS上测试。
还有一个更严重的问题,按照C++对象模型中所说:出现在derived class中的base class subobject有其完整的原样性。
如果这样的话,按理说应该输出:8 12 16
难道编译器(g++)做了优化??
已解决:在vs2010上的确是 8 12 16
原来是g++的问题,g++你太牛逼了,不怕这样的优化出现问题么!!??