c++ - RTTI 与 final 一起使用吗?

标签 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.

最佳答案

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

(我假设你不会让你的 dtor final。那是行不通的。)

关于c++ - RTTI 与 final 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999803/

相关文章:

c++ - 在 CUDA 中,Nsight 不在时间轴中显示 cuInit(0) 调用

c++ - gtkmm 链接器错误

c++11 - 使用 Boost.Fiber,c++ 是否更接近 Erlang 风格的进程/线程?

delphi - TForm 上的 RTTI GetFields 和 GetAttributes

C++11 Dynamic Cast If Else Chain -> 开关

delphi - 使用 SetPropValue() 和 RTTI 与 Delphi Tokyo 更改组件属性

c++ - 使用与其他来源不同的编译器来 boost 编译

c++ - glDrawArrays 意外行为

c++ - 调用函数时没有调用构造函数

c++ - gdb 7.5.1 调试通过 g 4.7.2 构建的可执行文件的问题