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 分别的结果是多少?说出理由哦
第 1 条附言 · 2018 年 10 月 29 日
append 一下,查看 object layout 的方式:
- g++:
编译时参数: -fdump-class-hierarchy
- visual c++:
编译时参数:/d1reportAllClaaLayout
- g++:
编译时参数: -fdump-class-hierarchy
- visual c++:
编译时参数:/d1reportAllClaaLayout
10 条回复 • 2018-10-24 19:01:49 +08:00
|
1
wutiantong 2018 年 10 月 24 日
X 是 1,Y&Z 是 8,A 是 Y+Z。
如果去掉 virtual,Y&Z 是 1,A 还是 Y+Z。 运行结果告诉我的。。。 |
|
2
coordinate 2018 年 10 月 24 日
编译器行为,空类为 1,虚继承中添加了虚指针。
|
|
3
innoink 2018 年 10 月 24 日 via Android
虚基类指针
|
|
4
SeaRecluse 2018 年 10 月 24 日
能不能先把空格对齐了,看着好难受:(
|
|
5
yanjusong 2018 年 10 月 24 日
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) +--- |
|
8
liberize 2018 年 10 月 24 日 |
|
9
jiang42 2018 年 10 月 24 日 via iPhone
觉得是 UB 吧……有没有精通标准的大佬出来指点一下
|