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

标签 c++ oop gcc virtual-functions

class A{
     void virtual a(){}
};
int main() { 
    std::cout<<sizeof(A);
}

在上述情况下,为什么编译器不使函数成为非虚拟函数并节省分配给它的空间。有没有不这样做的具体原因?

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

最佳答案

因为您可能会在单独的翻译模块中创建派生类。

理论上这可以在链接时解决,但这会涉及很多工作,所以在实践中不会发生(AFAIK)。

关于c++ - 为什么编译器在可能的情况下不使虚函数成为非虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17410190/

相关文章:

c++ - decltype(new any_type()) 是否可能发生内存泄漏?

c++ - python::boost::对象分配

c++ - 对象的底层类型是如何在运行时确定的?

c++ - 可变参数模板的性能影响

gcc - 使用弱符号时如何避免对 GLIBC_X.Y 的依赖

c++ - 如何创建可从 C 调用的基于 Qt 的库

c++ - sizeof(unsigned char) 也保证为 1 吗?

python - Python中如何通过类字典直接访问类实例

c++ - 'empty' 构造函数或析构函数会做与生成的相同的事情吗?

C++:从 main() 调用模板函数