【发布时间】:2017-04-20 11:26:27
【问题描述】:
#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?
【问题讨论】:
-
它没有被标记为
final,那么编译器怎么能看出它不是从另一个文件中派生出来的呢? -
我以为开发人员会看到它实际上并没有派生或派生自任何东西,为什么需要在类中添加 virtual 关键字?
标签: c++