#include <iostream>
using namespace std;
class a {
virtual int foo() {
return 0;
}
};
class b {
int foo() {
return 0;
}
};
int main() {
cout << sizeof(b) << endl;
cout << sizeof(a) << endl;
}
输出(使用g ++ 4.9,-O3):
1
8
我认为尺寸的增加是由于添加了一个vpointer。但我认为编译器会发现a实际上并没有从任何东西派生或派生,因此不需要添加vpointer?
答案 0 :(得分:6)
需要vpointer,因为编译器无法保证外部(例如共享)库不使用派生类型。派生类的解析存在于运行时。
答案 1 :(得分:0)
运行时类型信息。任何多态类都会在程序中创建额外的元数据,以使typeof
和dynamic_cast
之类的工作正常。这是虚函数表的补充。