cast类型强制转换

发布时间 2023-10-16 20:59:12作者: iu本u

都在运行时执行,而不是在编译时执行,所以有运行成本。它们实际是函数,所以需要传参数,还有返回值。

  • \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