在派生类中调用sizeof(* this)

时间:2014-04-16 01:30:28

标签: c++ inheritance this specialization

如果我有两个类,其中 B A 的特化,而 A 具有一个名为size的非虚函数:

class A
{
  unsigned Size() {return sizeof(*this);}
}

class B: public A;

当我从 B 调用尺寸功能时,它会返回 B 的尺寸还是 A 的尺寸?我假设 B ,因为这个关键字会为每个关键字评估不同的东西,但我不确定。

1 个答案:

答案 0 :(得分:7)

首先,sizeof 一个函数。它是一个编译时运算符。

因为它是编译时,所以它不可能知道this的指向类型。对于任何class Tthis应始终视为T* this。即使实际指向派生类型。

因此,正如Matt McNabb pointed out所示,您的代码相当于return sizeof(A)

因此,您的非虚拟Size()函数将始终返回其定义的类的大小。现在,如果您将其设置为虚拟,并在所有类中覆盖它,则应该给出正确的大小对于任何这些类,由编译器确定。