cast类型强制转换
都在运行时执行,而不是在编译时执行,所以有运行成本。它们实际是函数,所以需要传参数,还有返回值。
- \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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)