Open
Description
写的是:
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
Labels
No labels