【发布时间】:2022-11-19 01:35:25
【问题描述】:
假设您有这个简单的类层次结构:
struct base {
virtual void f () const = 0;
};
struct derived : public base {
virtual void f () const final
{
...
}
};
f() 只有一个实现,并且因为它被声明为 final,我们可以认为没有多态性吗?
如果是这样,编译器是否会通过避免使用虚拟表来优化代码,因为“你不支付你不使用的东西?”
谢谢你。
【问题讨论】:
-
编译器通常不愿意在优化期间更改类布局,但调用本身确实可能被去虚拟化。为了“[这里]没有多态性”,你必须定义什么是多态性。
-
虚函数和动态多态性是相辅相成的。缺一不可。有一种叫做静态多态的东西不需要虚函数。 (modernescpp.com/index.php/dynamic-and-static-polymorphism)
-
编译器无法查看其他编译单元。这些其他编译单元可能从
base派生了其他类。
标签: c++ polymorphism virtual final vtable