【发布时间】:2013-06-28 21:52:57
【问题描述】:
class A{
void virtual a(){}
};
int main() {
std::cout<<sizeof(A);
}
在上述情况下,为什么编译器不将函数设为非虚拟函数并节省分配给它的空间。有没有不这样做的具体原因?
我使用的是 gcc 4.7 编译器,如果它是特定于编译器的。
【问题讨论】:
-
因为编译器无法准确判断你是否使用了动态调度机制。它不能仅仅通过检查当前的 TU 来假设您不这样做。
-
在一个相关问题上,值得注意的是,如今大多数编译器都可以内联虚函数,因为它可以在编译时确定正在调用哪个虚函数的重载。
标签: c++ oop gcc virtual-functions