我收到了与sizeof()
相关的以下问题:
class C
{
public:
C();
virtual ~C();
unsigned char _member0 s[4];
static long _member1 d;
}
int main()
{
C vc;
cout << sizeof(vc);
}
有人可以解释在这种情况下如何评估sizeof()
函数吗?
答案 0 :(得分:7)
确切的答案可能因编译器而异,因此从严格意义上说,问题的答案是 实现定义 。
考虑到这是一次面试Q(看到你以前的Q ),你应该指出以下几点:
vptr
添加到类实例中,这可能会增加大小。 static
成员不会对类对象的大小做出贡献,因为它们不属于类的实例,而属于类。答案 1 :(得分:0)
它给出了vc的大小。 vc是C类.C类的每个对象都包含元数据(指向vtable的指针),因为C包含虚方法。另外,C有一个数据字段(字符数组)。
因此vc的大小应该是指针的大小加上四个字节(加上填充,请参阅下面的评论,谢谢)。
d不是C类对象的组成部分,因为它是静态的,因此它不计算。
所以我们有:
------vc--------- ----vtable for C---- ----statics----
| ptr to vtable | ----------> | pointer to ~C | | C::d |
|---------------| | ... | | ... |
| char [4] | -------------------- ---------------
-----------------