#include <iostream>
#include <vector>
#include <set>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <iterator>
#include <algorithm>
using namespace std;
class A{
public:
char a[3];
virtual void hehe(){}
};
class B:public virtual A{
public:
char j[3];
virtual void bb(){}
};
class C:public virtual B{
public:
char k[3];
virtual void cc(){}
};
class D:public A{
public:
char j[3];
virtual void bb(){}
};
class E:public D{
public:
char k[3];
virtual void cc(){}
};
int main(){
cout << sizeof(A) << " " << sizeof(B) << " " << sizeof(C) << endl;
cout << sizeof(A) << " " << sizeof(D) << " " << sizeof(E) << endl;
}
在visual studio中的结果是
在codeblock中结果是,我的codeblocks是默认的编译器。g++
可以看出不同编译器对虚拟继承的实现方式不同。而vs的是符合《深入探索C++对象模型》的说法的。