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

posted @ 2022-09-25 15:30  atomxing  阅读(38)  评论(1编辑  收藏  举报