都在运行时执行,而不是在编译时执行,所以有运行成本。它们实际是函数,所以需要传参数,还有返回值。
- \static_cast:
c++中传统的类型转换直接使用(类型),如果出错也不会提醒错误,但使用static_cast<类型>就会提示
- reinterpret_cast:
类型相关的转换,起始是底层内存映射的转换
- dynamic_cast
用于父类和子类之间的类型转换。例子:假设Enemy和Player都是Entity的子类,当将Enemy和Player都转换为Entity时,我们不知道它原来时玩家还是敌人;
当你强制再转换回任意身份时,它都不会报错,这样就会出现类型错误。
dynamic_cast使用了RTTI存储运行时的类型,在之后可以检查类型是否匹配,这增加了开销。
class Entity {
public:
virtual void PrintName() { }//写一个虚函数,表示它是一个多态类型,必须继承重写
};
class Player :public Entity {
};
class Enemy :public Entity{
};
Entity* actuallyPlayer = new Player();
//Enemy* actuallyEnemy = (Enemy*)actuallyPlayer;//显然开始的player既是Entity又是Player,是双态类型;原本它是Player,现在强制转换成Enemy却没有报错。
Entity* actuallyEnemy = new Enemy();
Player* p1 = dynamic_cast<Player*>(actuallyEnemy);
Player* p2 = dynamic_cast<Player*>(actuallyPlayer);
当类型转换成功就返回1,转换不成功返回NULL
标签:Enemy,转换,Player,dynamic,Entity,cast,类型,强制 From: https://www.cnblogs.com/wangkaixin-yy/p/17768338.html