C++ 如果一个类实际上继承了一个字符,为什么它的大小只有一个字符8?

C++ 如果一个类实际上继承了一个字符,为什么它的大小只有一个字符8?,c++,C++,我有这个 class Empty {}; // Empty class class Derived : virtual public Empty { char c; }; 在我的机器上,sizeofDerived;是8,为什么?它不应该是1,因为它只有1个字符吗 当我删除虚拟继承时,sizeofDerived;是1 在我的机器上,sizeofDerived;是8,为什么 因为这是编译器选择的。由于虚拟基,对象的表示可能需要更多内存。在典型的实现中,对象中会有一个虚拟表指针

我有这个

class Empty {};  // Empty class

class Derived : virtual public Empty
{
        char c;
};
在我的机器上,sizeofDerived;是8,为什么?它不应该是1,因为它只有1个字符吗

当我删除虚拟继承时,sizeofDerived;是1

在我的机器上,sizeofDerived;是8,为什么

因为这是编译器选择的。由于虚拟基,对象的表示可能需要更多内存。在典型的实现中,对象中会有一个虚拟表指针

它不应该是1,因为它只有1个字符吗


不可以。对象的大小不应该是其成员大小的总和。

呃,编译器会这样做。你能澄清这个问题吗?结果是什么?你期望什么?为什么?至少你自己要努力解决这个问题!你读过吗?什么是不清楚的?你可能想仔细阅读到底是什么以及它是如何工作的。虚拟继承需要一些额外的簿记,这就是为什么它会导致更大的对象大小…如果您在64位机器上,它会变成16位,原因相同:指针和填充。