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

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

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/49b42669-0cdf-4578-9e4f-203d789e83ae/fd51dc0c1353d0a76e53f9f72e8c7028.jpg

c++类型转换

在 C 语言中,进行类型转换只需要在变量前面加上变量类型,并且转换可以是双向的。例如 int 类型可以转换为 double 类型,double 类型也可以转换为 int 类型。(推荐教程:c++手册教程

但是这种简单粗暴的方式在 C++ 中是不合适的。第一,无法完成 C++ 中的自定义数据类型类;第二,C 语言可以在任意类型之间转换,比如可以将一个指向 const 型对象的指针转换为指向一个非 const 型对象的指针,这对类型检查非常严格的 C++ 来说,显然是不合理的,所以 C++ 提供了4种特有类型转换操作符。

1、static_cast

类似于 C 语言中的类型转换,可以进行无条件类型转换。应用场景:

基本类型转换。

父类和子类指针之间的转换。如果父类指针指向一个对象,此时将父类指针转换为子类指针是不安全的,子类指针转换为父类指针是安全的。

将任何类型的表达式转换为 void 类型。

注:static_cast 不能去除类型的 const 或者 volatile 属性;不能进行无关类型转换(如非基类和子类)。

2、dynamic_cast

dynamic_cast 只能用于对象指针之间的转换,转换结果亦可以是应用。在类层次间进行上行转换时,dynamic_cast 和 static_cast 的效果是一样的;在进行下行转换时,dynamic_cast 具有类型检查的功能,比 static_cast 更安全。

注:父子类指针之间转换时,该父类中必须包含一个函数

3、const_cast

用于取出 const 属性,去掉类型的 const 或者 volatile 属性,将 const 类型的指针变为非 const 类型的指针。

4、reinterpret_cast

reinterpret_cast 只是重新解释类型,没有二进制的转换。应用: