cast类型强制转换

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

  • \static_cast:

  c++中传统的类型转换直接使用(类型),如果出错也不会提醒错误,但使用static_cast<类型>就会提示

  • reinterpret_cast:

   类型相关的转换,起始是底层内存映射的转换

  • dynamic_cast 

  用于父类和子类之间的类型转换。例子:假设Enemy和Player都是Entity的子类,当将Enemy和Player都转换为Entity时,我们不知道它原来时玩家还是敌人;

当你强制再转换回任意身份时,它都不会报错,这样就会出现类型错误。

dynamic_cast使用了RTTI存储运行时的类型,在之后可以检查类型是否匹配,这增加了开销。

class Entity {
publicvirtual 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

posted @   iu本u  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示