RTTI是否适用于最终版?

时间:2012-04-03 19:12:08

标签: c++ c++11 rtti

我正在通过Stroustrup的C ++ 11 FAQ学习C ++ 11。我有一个问题。

如果在类中将虚函数定义为final,RTTI(dynamic_cast和typeid)是否仍然可以在其派生类上运行?


@MSalters:我的意图是,让我们说:

struct A {
    virtual void f() final; // only one virtual function, but final
};
struct B : A {
};
A* pa = new B;
B* pb = dynamic_cast<B*>(pa); // would this work? I guess it applies to typeid as well.

1 个答案:

答案 0 :(得分:3)

在基类中声明虚函数final可以防止它被覆盖(10.3 / 4)。它仍然是继承的,因为所有成员都是继承的(模12章,特殊成员函数)。因此,派生类是多态的(10.3 / 1),RTTI可以工作。

(我假设你不打算制作你的dtor final。这不起作用。)