为什么编译器在可能的情况下不使虚拟函数成为非虚函数?

ban*_*run 2 c++ oop gcc virtual-functions

class A{
     void virtual a(){}
};
int main() { 
    std::cout<<sizeof(A);
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,为什么编译器不使该函数非虚拟并保存分配给它的空间.有没有特定的理由不这样做?

我正在使用gcc 4.7编译器,如果它是特定于编译器的.

Oli*_*rth 8

因为您可以在单独的转换模块中创建派生类.

理论上这可以在链接时解决,但这将涉及大量工作,因此在实践中不会发生(AFAIK).