【发布时间】:2013-02-06 08:05:59
【问题描述】:
考虑下面的代码:
#...
class A {};
class B: public A{};
class C: virtual public A{};
class D: virtual public C{};
// No More Classes
...
int _tmain(int argc, _TCHAR* argv[]) {
cout<<sizeof(A)<<" ";
cout<<sizeof(B)<<" ";
cout<<sizeof(C)<<" ";
cout<<sizeof(D)<<".";
...
}
O/P:1 1 4 8。
问题:
- sizeof(A) = 1byte,这个位置对编译器/我们来说很重要。
- 当实际上没有任何东西存在时,为什么编译器还要在 C 类对象中添加 vptr。
- 如果我们没有任何虚函数,编译器会向派生对象添加一个额外的 vptr。
*。这是我的第一个问题,如果您发现任何错误,请纠正我。
【问题讨论】:
-
这里的第一个问题:+1 表示一篇好的、格式良好且不言自明的帖子。
-
我真的没有看到任何问题,只是一个陈述列表。
-
@JoachimPileborg - “2. 当实际上没有任何东西存在时,为什么编译器会费心在 C 类对象中添加 vptr”。我猜
3.与.2相同。1.最有可能 - 表明 OP 知道为什么结果是1。 -
优秀有趣的第一个问题
-
@meh 一个问题通常以问号结尾(比如这个
?)。代码不完整(即无法编译),并且带有窗口的扩展。因此,我不会称其为格式良好且不言自明的帖子。