关于转换
16lz
2021-01-22
转换指的是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。
C++标准定义了四个新的转换符:reinterpret_cast、static_cast、dynamic_cast和const_cast,目的在于控制类(class)之间的类型转换。
1.static_cast
static_cast可以用于类层次结构中基类和子类之间指针或引用的转换。把子类的指针或引用转换成基类表示是安全的,但把基类指针或引用转换成子类指针或引用时,由于没有动态类型检查,所以,它是不安全的。基类和子类之间的动态类型转换一般建议使用dynamic_cast。static_cast可以用作对象继承之间转换,只不过有安全隐患。
2.dynamic_cast
dynamic_cast用于对象的指针和引用,当用于多态类型转换时,允许隐式转换及相反的转换操作,与static_cast的不同之处在于,而在相反的转换过程中,dynamic_cast会检测操作的有效性,如果返回的不是被请求的有效完整对象,则返回null,反之返回这个有效的对象,如果是引用返回无效时,则会抛出bad_cast异常。
3.const_cast
const_cast用来修改类型的const或volatile属性,具体而言,const_cast会操纵传递对象的const属性,设置或者移除该属性。
4.reinterpret_cast
reinterpret_cast用来处理无关类型之间的转换,可以转换任意一个32位整数,包括所有的指针和整数。可以把任何整数转成指针,也可以把任何指针转成整数,以及把指针转化为任意类型的指针,但不能将非32位的实例转成指针。
更多相关文章
- 用数据分析大家最喜欢什么类型的抖音视频。
- JavaScript 中的强制类型转换[每日前端夜话0x4F]
- 为什么继承 Python 内置类型会出问题?!
- Python到底是强类型语言,还是弱类型语言?
- Python 3.10 的首个 PEP 诞生,内置类型 zip() 将迎来新特性
- Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类
- 从Excel的数据类型说Python
- 一文学懂 TypeScript 的类型 [每日前端夜话0x39]
- 对比 C++ 和 Python,谈谈指针与引用