sizeof *这个对象

时间:2011-08-12 00:25:00

标签: c++

代码:

#include <cstdio>

class myc {
    int dummy;
public:
    int si(){return sizeof(*this);}
};

class d_myc : public myc {
    int d_dummy;
};

int main() {
    myc a;
    d_myc b;
    printf("%d %d\n%d %d", a.si(), b.si(), sizeof(a), sizeof(b));
    return 0;
}

输出:

4 4
4 8

我期待:

4 8
4 8

为什么我的期望错了?

3 个答案:

答案 0 :(得分:23)

sizeof在编译时解决,而不是在运行时解析。因此sizeof(*this)相当于sizeof(myc)

答案 1 :(得分:1)

我不知道“为什么你的期望错了”,因为我无法读懂思想:)。但如果你写了 sizeof(myc),sizeof(d_myc) 编译器将生成与您上面编码的代码完全相同的代码。 myc有1个int,假设为32bit,所以4个字节。 d_myc有2个int =&gt; 8个字节。

答案 2 :(得分:0)

这在编译时解决:

class myc {
    int dummy;
public:
    int si(){return sizeof(*this);}
};

即。 *this始终是myc,永远不会是d_myc。 为了得到你想要的东西,你必须覆盖d_myc中的函数,以在派生的基础上做同样的事情。这是因为sizeof(d_myc)也包括基类。