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的实现