【发布时间】:2011-01-22 05:23:06
【问题描述】:
这是一个家庭作业问题。对于以下代码,
#include <iostream>
using namespace std;
class A
{
public:
virtual void f(){}
};
class B
{
public:
virtual void f2(){}
};
class C: public A, public B
{
public:
virtual void f3(){}
};
class D: public C
{
public:
virtual void f4(){}
};
int main()
{
cout<<sizeof(D)<<endl;
}
输出为:8
谁能解释一下它是8字节吗?如果 vtable 实现依赖于编译器,我应该在面试中回答这种问题?那么虚拟基类呢?
编辑:我正在使用 32 位平台。
【问题讨论】:
-
sizeof运算符在大多数情况下对类类型没有真正意义。如果你依赖类的大小来做某事,那么你的设计在某个地方出错的可能性很大(尽管不是 100%)。您能否详细说明您在作业中要完成的工作,或者这是实际的作业问题? (如果是后者并且讲师没有指定特定的编译器或平台,那么唯一正确的答案是“类的大小是实现细节。”) -
@Jonathan:我很久以前在笔试中遇到过这个问题,在给出的多项选择中没有像“实施依赖”这样的选项。公司名称是菲尔***。我想,我不能在这里提到公司名称:)
-
那么笔试不允许正确答案。这并不意味着它不正确。 “8 字节”、“两个指针”或“64 位”都不是正确答案,即使它在特定系统/编译器组合上是准确的。
-
如果有人在面试问题中提出这样的问题,您可能会考虑直接回答:“感谢您的宝贵时间,但我只是决定不想在这里工作。”