class A { public: virtual void f() = 0; }; class B : public A { public: void f() final override { }; }; int main() { B* b = new B(); b->f(); }
在这种情况下,编译器是否仍然需要对
b->f();
B::f()
final
C++中final是用来优化的吗?
可以,而且确实如此。
如前所述,它已经被使用; 参见此处和此处显示了使用和不使用
沿着这些路线的优化将与虚拟调用的“去虚拟化”相关。这并不总是立即受到类或方法的
如果编译器可以确定在运行时始终会调用特定方法(例如,给定带有自动对象的 OP 示例),则无论该方法是否为 final,它都可以应用此类
优化
优化属于 as-if 规则,该规则允许编译器应用任何转换,只要可观察的行为就像原始代码已被执行一样。