sizeof *this object

sizeof *this object

本文关键字:object this sizeof      更新时间:2023-10-16

代码:

#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 %dn%d %d", a.si(), b.si(), sizeof(a), sizeof(b));
    return 0;
}

输出:

4 4
4 8

我预期:

4 8
4 8

为什么我的期望是错误的?

sizeof在编译时解析,而不是在运行时解析。因此CCD_ 2等价于CCD_ 3。

这在编译时解决:

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

即CCD_ 4总是myc并且永远不会是CCD_。要获得您想要的内容,您必须覆盖d_myc中的函数,以便在派生的中执行与基础相同的操作。这是因为sizeof(d_myc)也包含基类。