代码:
#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
为什么我的期望错了?
答案 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)
也包括基类。