class X {};
class Y : public virtual X{};
class Z: public virtual X{};
class A:public Y, public Z{};
void test_sizeof_class() {
	size_t temp = sizeof(X);
	temp = sizeof(Y);
	temp = sizeof(Z);
	temp = sizeof(A);
}
请问 sizeof 分别的结果是多少?说出理由哦
|  |      1wutiantong      2018-10-24 15:34:27 +08:00 X 是 1,Y&Z 是 8,A 是 Y+Z。 如果去掉 virtual,Y&Z 是 1,A 还是 Y+Z。 运行结果告诉我的。。。 | 
|  |      2coordinate      2018-10-24 16:05:07 +08:00 编译器行为,空类为 1,虚继承中添加了虚指针。 | 
|  |      3innoink      2018-10-24 16:10:50 +08:00 via Android 虚基类指针 | 
|      4SeaRecluse      2018-10-24 16:11:49 +08:00 能不能先把空格对齐了,看着好难受:( | 
|  |      5yanjusong      2018-10-24 16:17:58 +08:00 msvc120 下结果: sizeof(X)=1 sizeof(Y)=4 sizeof(Z)=4 sizeof(A)=8 class X size(1): +--- +--- class Y size(4): +--- 0 | {vbptr} +--- +--- (virtual base X) +--- class Z size(4): +--- 0 | {vbptr} +--- +--- (virtual base X) +--- class A size(8): +--- | +--- (base class Y) 0 | | {vbptr} | +--- | +--- (base class Z) 4 | | {vbptr} | +--- +--- +--- (virtual base X) +--- | 
|  |      8liberize      2018-10-24 18:13:06 +08:00  1 | 
|      9jiang42      2018-10-24 18:24:39 +08:00 via iPhone 觉得是 UB 吧……有没有精通标准的大佬出来指点一下 |