Skip to content

dynamic_cast 的描述不够严谨 #113

Open
@Mq-b

Description

@Mq-b

写的是:

dynamic_cast
用于多态类型的转换
执行行运行时类型检查
只适用于指针或引用
对不明确的指针的转换将失败(返回 nullptr),但不引发异常
可以在整个类层次结构中移动指针,包括向上转换、向下转换

dynamic_cast< 新类型 >( 表达式 )
如果 表达式 是到多态类型 Base 的指针或引用,且 新类型 是到 Derived 类型的指针或引用,那么会进行运行时检查

除此之外其他时候基本上是没有这种额外开销的。

并且它也可以用作其他的转换。

struct X { };
struct Y :X {};

int main() {
    Y* y = new Y;
    auto p = dynamic_cast<X*>(y); // 无虚函数 子类转父类,毫无问题。
    auto p2 = static_cast<X*>(y); //
}

无虚函数,自然没有所谓的运行时检查。

当然了,没开销的时候说明不该使用 dynamic_cast

感觉应该改成

dynamic_cast
dynamic_cast 常用于多态类型的转换,如果是多态类型的话:
执行行运行时类型检查
只适用于指针或引用
对不明确的指针的转换将失败(返回 nullptr),但不引发异常
如果转型失败且 新类型 是引用类型,那么它会抛出与类型 std::bad_cast 的处理块匹配的异常
可以在整个类层次结构中移动指针,包括向上转换、向下转换

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions