https://www.jb51.cc/csharp/1192462.html

编程之家收集整理的这篇文章主要介绍了C++类型如何进行转换编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

方法:1、static_cast,用于非多态类型的转换;2、reinterpret_cast,转换成另一种不相关类型;3、const_cast,删除变量的const属性,再赋值;4、dynamic_cast,用于类继承层次间指针或引用转换。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d00c3125-8350-4e20-8077-61437d57961f/abb31947c6b24c82e600096699c592d8.jpg

本教程操作环境:windows7系统、C++17版本、Dell G3电脑。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1d4ee97c-9aab-4251-a02d-01311b342831/54545afdcad31e42dd35bdb09fa0ff04.png

C++为了规范C中的类型转换,加强类型转换的可视性,引入了四种强制类型转换操作符:static_cast, reinterpret_cast, const_cast, dynamic_cast

他们本质上都是模板类。

下面分别来介绍:

1.static_cast

它用于非多态类型的转换(静态转换),对应于C中的隐式类型转换但他不能用于两个不相关类型的转换,如整形和整形指针之间的转换,虽然二者都是四个字节,但他们一个表示数据,一个表示地址,类型不相关,无法进行转换。

该转换在编译时完成,和C风格的类型转换相似,不过要注意下面几点

不能在没有派生关系的两个类类型之间转换

不能去除掉原有类型的类型修饰符,例如const,volatile,__unaligned

转换对象时由于没有动态类型检查,所以由基类对象转换成派生类对象的时候存在安全隐患

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/cfe8c59b-42d2-4afc-b3ca-4d7539286bb8/a02e4391fc07846bf946f6a09325a038.png

2.reinterpret_cast

reinterpret的含义是重新解释,可将一种类型转换成另一种不相关类型,对应C中的强制类型转换,处理无法进行隐式转换的情况

强制类型转换有时可以很暴力的处理一些问题