C++强制类型转换dynamic_cast
- dynamic_cast是C++提供的一种类型转换语法糖,它更像是一个函数。不同于其他的几种类型转换,dynamic_cast会有性能开销。
- dynamic_cast常用于继承类型的类型转换,它维护了一个RTTI(runtime type information),如果类型转换失败,则会返回null
这里将Entity指针转换为Player指针
class Entity
{
public:
virtual void print(){
}
};
class Player : public Entity
{
};
class Enemy : public Entity
{
};
int main(){
Player* p_player = new Player();
Enemy* p_enemy = new Enemy();
Entity* actualEnemy = p_enemy;
Entity* actualPlayer = p_player; // 子类可以隐式转换成父类
// Player* p_pp = actualPlayer; // 父类不能隐式转换成子类
// Player* p_pp = (Player*)actualPlayer; // 可以强制转换,但是不安全,例如转换成了一个Enemy类。
Enemy* p_pp2 = (Enemy*)actualPlayer; // 这个转换是错误的,但是并没有报错。
Player* pp = (Player*)actualEnemy;
Player* p0 = dynamic_cast<Player*>(actualPlayer);
if (p0){
std::cout << "转换成功" << std::endl;
}
else{
std::cout << "转换失败" << std::endl;
}
return 0;
}