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

Bru*_*lon 1 c++ inheritance this specialization

如果我有两个类,BAA的特化,有一个非虚函数叫做size:

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

class B: public A;
Run Code Online (Sandbox Code Playgroud)

当我从B调用Size函数时,它会返回B的大小还是A的大小?我假设B,因为this关键字会为每个关键字评估不同的东西,但我不确定.

Jon*_*art 7

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

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

因此,正如Matt McNabb 指出的那样,你的代码相当于return sizeof(A).

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