【发布时间】:2019-08-25 19:52:43
【问题描述】:
在涉及虚拟函数的虚拟继承的情况下,有人可以解释一下类的大小。代码如下:
class A
{
public:
char c;
virtual void z();
};
class B : public virtual A
{
double x;
char a, b;
int m, n;
public:
virtual void z();
virtual int p() { return 0; }
};
B类的大小是48。
【问题讨论】:
-
没什么好解释的。 C++ 标准不需要任何类的特定大小。
-
你期望班级的规模是多少,你为什么这么认为?
-
我期待 B 类的大小为 40,因为在非虚拟继承的情况下,大小为 32。
-
对于具有虚拟成员或基的类,大小高度依赖于编译器。您的评论建议使用 MSVC 进行编译(预期 +8 字节,改为 +16);如果是这种情况,您可能会惊讶地发现 MSVC 实际上使用两个 vtable 指针而不是一个,我建议 experimenting with class layouts 多一点,启用编译器特定的“显示布局”标志。
标签: c++ inheritance virtual