在 Java、C# 和 D 等语言中,final
或sealed
类保证是叶类(没有其他类继承自的类)。final
这允许编译器对编译时类型为或的对象进行顶级去虚拟化方法调用sealed
。
C++ 没有final
orsealed
关键字。有没有什么方法可以模拟它在我的继承层次结构中作为叶子的类的去虚拟化的行为?
在 Java、C# 和 D 等语言中,final
或sealed
类保证是叶类(没有其他类继承自的类)。final
这允许编译器对编译时类型为或的对象进行顶级去虚拟化方法调用sealed
。
C++ 没有final
orsealed
关键字。有没有什么方法可以模拟它在我的继承层次结构中作为叶子的类的去虚拟化的行为?
C++11 确实有final
,尽管它是一个特殊的标识符,而不是关键字。它不服务于“去虚拟化”目的。它只是防止从派生类派生或在派生类中覆盖单个方法。
在 C++ 中这样做的唯一方法是确保编译器知道静态和动态类型是相同的,并让优化器意识到不需要虚拟调用。换句话说,按值访问对象,而不是通过引用或指针。这甚至适用于非叶子类型!