首页 > 其他分享 >四种强制转换

四种强制转换

时间:2022-09-25 15:33:05浏览次数:76  
标签:const 派生类 cast 基类 转换 强制 四种 指针

四种强制转换

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

标签:const,派生类,cast,基类,转换,强制,四种,指针
From: https://www.cnblogs.com/libxing/p/16727967.html

相关文章

  • 【code随笔】java int数组到set的转换
    很多高级用法,比如Stream,Compare都只针对包装类直接int[]到set只能使用赋值的方法int[]nums={0,0,1,1,1,2,2,3,3,4};Set<Integer>set=newHashSet<>();for(i......
  • Java基础语法 自动类型提升和强制类型转换
    基本数据类型转换强制类型转换packageBasicGrammar;/*基本数据类型之间的运算规则:前提:这里讨论只是7种基本数据类型变量间的运算。不包含boolean类型的。1.自......
  • 数据类型转换
    数据类型转换publicclassMain{  publicstaticvoidmain(String[]args){    //运算中,不同类型的数据先转化为同一类型,然后进行运算    //由低......
  • Java基础(标识符,数据类型,数据转换,变量)
    注释Java中的注释有3种:单行注释 //多行注释/**/文档注释/***/注释不会被执行,是给我们写代码的人看的书写注释是一个非常好的习惯标识符Java所有的组成部......
  • C C++结构体四种方式
    第一种语法表示struct结构体名称{    数据类型member1;    数据类型member2; }; #include<iostream>usingnamespacestd;structStudent{int......
  • 如何优雅转换且避免线程不安全的问题
    一、常见时间格式化方式publicstaticvoidmain(String[]args){Datenow=newDate();//创建一个Date对象,获取当前时间StringstrDateFormat="yyyy-MM......
  • 无法将类型string隐式转换为textbox wpf中
    大致意思是这样的,想把我获取到的字符串放入textbox中,然后我就写了这么一句a.textbox="获取到的字符串"  然后就有了下面的错误,啥也不说,强转a.textbox=(Textbox)"获取......
  • java中如何在ISO-8859-1和UTF-8之间相互转换呢?
    我们都知道在一些特殊的场景,我们需采用特殊的编码格式,如:UTF-8,但是系统默认的编码为ISO-8859-1那么我们就需要将编码转换为我们所需的编码格式,今天我就遇到这个问题,需要......
  • 数据类型转换
    packagebase;importjava.util.Date;publicclassClassTransform{publicstaticvoidmain(String[]args){inti=128;byteb=(byte)i......
  • 年周转换成x月第几周
    sql语句查询的是按照周统计,但是需求要显示某月的第几周如下的介绍mysql统计查询的方法按天统计selectDATE_FORMAT(create_time,'%Y%m%d')days,count(caseid)countf......