C++的类型转换(static_cast、dynamic_cast、const、reinterpret_cast)

网友投稿 249 2022-09-15

C++的类型转换(static_cast、dynamic_cast、const、reinterpret_cast)

一、隐式类型转换,系统自动进行,不需要程序开发人员的介入,例如int   m=3.2635  //编译器会将小数部分滤掉,

二、显式类型转换

C语言中强制类型转换     int  k=5%(int)3.2C++四种强制类型转换: 每一种类型有不同的目的,不同的类型检查,但有一个通用形式  :强制类型转换名(type)(express)  其中强制类型转换名是如下的a b c d四种 ,type  转换的目标类型,express  转换的值a) static_cast1) 静态转换,编译时就会进行类型转换的检查,跟C语言中的强制类型转换相似int i= (int) 2.32 ;int i2 =static_cast(2.32);2) 子类转成父类类型class  A{}; class B public A {} ;B b;A a =static_cast (b);3)void * 与其他类型指针之间的转换,void *  无类型指针,可以指向任何指针类型int i =10;int *p=&i;void *q=static_cast(void *)(p);4) 不可用于指针之间的转换比如:int * 转double *  ,  float  *转double *b) dynamic_cast主要应用于运行时类型识别和检查,主要用于父类型和子类型之间转换用的(父类型指针指向子类型对象,然后用dynamic_cast 把父指针类型往子类型转换c) const_cast去除指针或者引用的const属性。能够将const性质转换掉编译时就会进行类型转换const  int  ai  =90;const int  *pai =&ai;int *p2 =const_cast(int *)(pai);d) reinterpret_cast编译的时候就会进行类型的检查,将操作数内容解释为另一种不同的类型,处理无关类型的转换,可以随意转,被认为是危险的类型转换,常用于如下两种转换:1)将一个整型转换成指针,一个类型的指针转换成另一个类型的指针,转换后重新解析内存中的内容2)将一个指针类型转换成整型int i =10 ;int *pi =&i;void *pvoid =reinterpret_cast(pi);int *pi2 =reinterpret_cast(pvoid);

总结:

1)强制类型转换,不建议使用,强制类型转换抑制编译器报错

2)认识了解,方便阅读别人代码

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:迷宫问题
下一篇:索引最大堆
相关文章

 发表评论

暂时没有评论,来抢沙发吧~