dynamic_cast用于继承体系中安全的向下转型,依赖RTTI检查类型;转换指针失败返回nullptr,转换引用失败抛出bad_cast异常;仅适用于多态类型,且需包含虚函数,性能低于static_cast。

在C++中,dynamic_cast 是一种运行时类型转换操作符,主要用于在继承层次结构中进行安全的向下转型(downcasting),即把基类指针或引用转换为派生类的指针或引用。它依赖于RTTI(Run-Time Type Information,运行时类型信息)来检查转换是否合法。
转换指针:
dynamic_cast<目标类型*>(源指针)转换引用:
dynamic_cast<目标类型&>>(源引用)注意:只有多态类型(即包含至少一个虚函数的类)才能使用 dynamic_cast 进行指针到引用的转换,否则编译会报错。
立即学习“C++免费学习笔记(深入)”;
当使用 dynamic_cast 转换指针时,如果转换不合法或对象不是目标类型的实例,返回 nullptr。
示例:
#include <iostream>class Base {
public:
virtual ~Base() {} // 必须是多态类型
};
class Derived : public Base {
public:
void specific() {
cout << "Derived method called." << endl;
}
};
int main() {
Base b = new Derived();
Derived d = dynamic_cast<Derived*>(b);
if (d) {
d->specific(); // 安全调用派生类方法
} else {
cout << "Cast failed!" << endl;
}
delete b;
return 0;
}
这里 Base 类有虚析构函数,因此是多态类型,dynamic_cast 可以正常工作。由于 b 实际指向的是 Derived 对象,转换成功。
引用不能为 null,所以当 dynamic_cast 用于引用且转换失败时,会抛出 std::bad_cast 异常。
示例:
#include <iostream>int main() {
Base base;
try {
Derived& dr = dynamic_cast<Derived&>(base);
dr.specific();
} catch (const bad_cast& e) {
cout << "Reference cast failed: " << e.what() << endl;
}
return 0;
}
因为 base 实际是 Base 类型而非 Derived,转换失败并抛出异常。必须用 try-catch 捕获。
基本上就这些。dynamic_cast 提供了类型安全的转换机制,特别适合需要判断对象真实类型再处理的场景。
以上就是c++++中如何使用dynamic_cast_c++ dynamic_cast用法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号