如果我有两个类,其中 B 是 A 的特化,而 A 具有一个名为size的非虚函数:
class A
{
unsigned Size() {return sizeof(*this);}
}
class B: public A;
当我从 B 调用尺寸功能时,它会返回 B 的尺寸还是 A 的尺寸?我假设 B ,因为这个关键字会为每个关键字评估不同的东西,但我不确定。
答案 0 :(得分:7)
首先,sizeof
不一个函数。它是一个编译时运算符。
因为它是编译时,所以它不可能知道this
的指向类型。对于任何class T
,this
应始终视为T* this
。即使实际指向派生类型。
因此,正如Matt McNabb pointed out所示,您的代码相当于return sizeof(A)
。
因此,您的非虚拟Size()
函数将始终返回其定义的类的大小。现在,如果您将其设置为虚拟,并在所有类中覆盖它,则应该给出正确的大小对于任何这些类,由编译器确定。