【发布时间】:2019-10-26 02:58:03
【问题描述】:
理论上,在 C++11 及更高版本中的虚拟方法声明上使用 final 关键字可以内联方法。
但是,我怀疑在实践中,如果在编译时知道没有派生类覆盖该方法,编译器可以为我们插入一个final 并内联该方法。
However, putting this into compiler explorer shows that it still provides optimizations.
这是为什么?
【问题讨论】:
-
“如果在编译时知道没有派生类”。你怎么知道的?
-
我可以阅读代码并看到没有任何派生类。
-
所以只能在link做,假设没有动态加载...
-
啊,这就是我缺少的一点。因此,如果我使用链接时优化,编译器可能会自动将方法标记为
final。如果您可以将仅知道在链接时可用的派生类型添加到您的答案中,我会接受它。
标签: c++ performance optimization compilation final