不记得我现在在哪里看到了,但是我在某处读到动态多态性阻止了编译器进行各种优化。

除了内联之外,还可以有人用多态性阻止编译器进行的此类“错失”优化机会的例子来启发我吗?

最佳答案

和:

Derived d;
d.vMethod(); // that will call Derived::vMethod statically (allowing inlining).

With(除非在C++ 11中将DerivedDerived::vMethod之一声明为final):
void foo(Derived& d)
{
    d.vMethod(); // this will call virtually vMethod (disallowing inlining).
}

虚拟通话会产生额外的费用(如通过vtable进行间接调用)。

C++ 11引入了final关键字,该关键字可以成为静态调用中的最后一个示例。

08-26 06:06