gpt4 book ai didi

虚拟继承类的 C++ 大小

转载 作者:行者123 更新时间:2023-11-28 01:33:07 25 4
gpt4 key购买 nike

这是我的代码:

#include <iostream>
using namespace std;
class MyClass{
int mem1;
float mem2;
};
class MyKids: public virtual MyClass{
int cmem1;
int cmem2;
};
class MyLawKids:public virtual MyClass{
int lmem1;
};
class MyGrands:public MyKids, public MyLawKids{
int gmem1;
};

int main(){
cout << "\n Size of MyClass: " << sizeof(MyClass) << " bytes" << endl ;
cout << " Size of MyKids: " << sizeof(MyKids) << " bytes" << endl ;
cout << " Size of MyLawKids: " << sizeof(MyLawKids) << " bytes" << endl ;
cout << " Size of MyGrands: " << sizeof(MyGrands) << " bytes" << endl ;
return 0;
}

结果:

 Size of MyClass: 8 bytes
Size of MyKids: 20 bytes
Size of MyLawKids: 16 bytes
Size of MyGrands: 32 bytes

Process returned 0 (0x0) execution time : 0.094 s
Press any key to continue.

我认为 MyGrands 类的大小应该是 36 字节 = (sizeof(MyKids + MyLawKids + int gmem1) - 4 字节的虚拟表指针)。

为什么我的结果显示“MyGrands 的大小:32 字节”?

最佳答案

MyGrands 由于 MyKidsMyLawKids 仅包含一个 MyClass 实例 inheriting virtually来自 MyClass。因此,通过重复计算 MyClass 的大小,您的计算是错误的。顺便说一句,一般来说,你不应该依赖于天真的添加与整体大小相同的部分。编译器可以添加填充。

关于虚拟继承类的 C++ 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50715808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com