final
是一个很好的关键字。它使我可以防止从类继承。它还允许编译器在调用虚拟函数或访问虚拟库时跳过运行时调度机制。
现在假设我有一些带有虚函数和/或基类的非final
类T
。还假设我引用了该类的一个实例。 我如何告诉编译器,该特定引用是针对完全派生的完整对象,而不是针对派生类型更多的基础子对象?]
我的动机是像optional
和vector
这样的课程。如果调用optional<T>::operator*()
,则会得到T&
。但是,我可以肯定地知道此引用确实是T
,而不是更多派生的对象。这同样适用于vector<T>
以及我访问其元素的所有方式。
我认为在这种情况下跳过动态调度是一个很好的优化,尤其是在调试模式下以及在编译器不够智能以无法查看optional
和vector
实现并取消调用虚拟化的情况下。
final是一个很好的关键字。它使我可以防止从类继承。它还允许编译器在调用虚拟函数或访问虚拟库时跳过运行时调度机制。 ...
正式,您可以这样做: