不记得我现在在哪里看到了,但是我在某处读到动态多态性阻止了编译器进行各种优化。
除了内联之外,还可以有人用多态性阻止编译器进行的此类“错失”优化机会的例子来启发我吗?
最佳答案
和:
Derived d;
d.vMethod(); // that will call Derived::vMethod statically (allowing inlining).
With(除非在C++ 11中将
Derived
或Derived::vMethod
之一声明为final
):void foo(Derived& d)
{
d.vMethod(); // this will call virtually vMethod (disallowing inlining).
}
虚拟通话会产生额外的费用(如通过vtable进行间接调用)。
C++ 11引入了
final
关键字,该关键字可以成为静态调用中的最后一个示例。