c++强制转换
四种强制转换
const_cast 去除指针或引用的const属性
什么场景会用
1《effective c++》第三条 当要写一个operator[]操作符重载,他会不断循环调用自己,所以先static_cast<const xxx*>(*this),来强制调用const operator[]函数,然后再用const_cast把const属性的结果值去除const属性。
2对于const数据我们更要这样保证:绝对不对const数据进行重新赋值。
如果我们不想修改const变量的值,那我们又为什么要去const呢?
原因是,我们可能调用了一个参数不是const的函数,而我们要传进去的实际参数却是const的,但是我们知道这个函数是不会对参数做修改的。于是我们就需要使用const_cast去除const限定,以便函数能够接受这个实际参数。
https://blog.csdn.net/qq_42567607/article/details/124455805
https://blog.csdn.net/u_hcy2000/article/details/122470469
https://blog.csdn.net/qq_42567607/article/details/124455805
static_cast 静态转换 基本等价于隐式转换的一种,可用于低风险的转换,不可以用于高风险的转换
在编译期间转换,转换失败的话会抛出一个编译错误。
reinterpret_cast 用于进行各种不同类型的指针之间、不同类型的引用之间以及指针和能容纳指针的整数类型之间的转换。转换时,执行的是逐个比特复制的操作。
基于比特复制的强制转换,风险很高
dynamic_cast 动态转换 借助 RTTI,用于类型安全的向下转(Downcasting)。
基类在上,派生类在下
向上转型:将派生类赋值给基类,将派生类指针转成基类指针(包括将派生类对象赋值给基类对象、将派生类指针赋值给基类指针、将派生类引用赋值给基类引用)---安全
(将派生类对象赋值给基类对象时,会舍弃派生类新增的成员,也就是"大材小用")
向下转型:将基类赋值给派生类---不安全
在运行时转换,转换失败返回nullptr(没有继承关系的时候,转化就会失败)
智能指针---用途和底层原理都要会
share_point 引用原理
weark_point
qstring
它多实现了一些其他函数 比如大小端字节序转换等函数
然后它是一个写时拷贝技术cow,提高了效率
unordered_map的实现
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~