据我所知,所有成员函数是在d虚拟但是编译器可以自由地使功能非虚拟如果它看到它们永远不会覆盖。

什么我不是清楚的是,当你编译在成员函数没有被重载一个模块,然后导入模块的其他地方,你重写一个成员函数会发生什么。我不认为它重新编译原来的模块。它简单地假设具有外部链接任何成员函数是虚拟?

有帮助吗?

解决方案

所有d成员函数是通过默认虚拟。我不认为有任何的编译器在那里,实际上使功能非虚拟为一个优化。你可以做到这一点手动虽然,通过标记类或功能为“最终”。

其他提示

FeepingCreature是除了不能进行虚拟模板函数大多正确。

这是如何实现的是反编译和接头特异性。但是,在虚拟函数调用可以被优化掉一个常见的情况是,当你有一个类实例化本地。然后函数调用可以直接此范围内进行,这是因为类的类型是在编译时完全清楚。这可以在一个编译器级别来进行。

除此之外,如果链接器实现功能的实现是从来没有覆盖,则链接器可能会做了优化和替换虚函数调用直接功能上类调用。特别是,如果一个类被从未衍生,然后到成员函数的所有呼叫可以被直接执行。这是因为如果该链接会等。无论可能插入“最终”关键字。 (接头可以不这种优化适用于导出的类和函数,由于连接基团不知道,如果功能是在其它库或可执行文件重写。)

我相信FeepingCreature是正确的,但除此之外,我认为你可以假设,如果它直接创建一个从源的可执行文件,这样的优化不仅可以通过编译器来考虑。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top