为什么派生类的大小是 8
Why is sizeof Derived Class is 8?
#include <iostream>
using namespace std;
class Empty
{};
class Derived : virtual public Empty
{
char c;
};
int main()
{
cout << "sizeof(Empty) " << sizeof(Empty) << endl;
cout << "sizeof(Derived) " << sizeof(Derived) << endl;
return 0;
}
为什么尺寸来了 8 我认为应该是 9,如果我将"c"声明为整数,那么它即将到来的 8卡尼你请给我解释一下逻辑
大小取决于实现,这取决于特定编译器实现虚拟主义和填充的方式。您不应该期望特定的值是某种东西。如果您想计算程序中的大小,只需使用sizeof
即可。
大小取决于实现。vtable
取四个字节,char
取一个字节,padding
取三个字节。这使它成为 8 个字节。因此,这取决于编译器如何实现虚拟和填充。如果要计算程序的大小,可以使用sizeof。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 为什么此派生对象无法访问基类的后递减方法?
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么派生类的好友不能使用受保护的成员?
- C++:为什么无法在派生类中访问受保护的构造函数?
- 为什么基类数据在派生类数据之前初始化
- 为什么为派生类定义复制构造函数需要定义基类的默认构造函数?
- 为什么基类中的复制和交换会导致派生类中的复制赋值运算符被隐式删除?
- 为什么编译器C++不能知道指针指向派生类?
- 为什么从基转换为派生提供此功能?
- 为什么派生类的实例从基类调用方法?
- 为什么允许将派生类的方法static_cast为基类的方法?
- C++ 为什么要将对基类的引用传递给派生类的构造函数
- 为什么此代码不将基类强制转换为 c++ 中的派生类?
- CRTP:为什么获得嵌套类型和派生类的嵌套方法有区别
- 为什么不能在实例化对基类的引用的同时实例化指向派生类的指针?
- 将第一个派生类转换为第二个派生类 - 为什么有效?
- 为什么"运算符<<"不适用于指向派生类型的成员?
- 在C++中,为什么仅包含与其基类实例的联合的派生类占用的内存多于联合的大小?
- 双重派生 - 为什么需要铸造