C++当中的几种强制类型转换

原创 2016年08月31日 14:50:32

在C++当中,我们不推荐继续使用C类型的强制转化,而是使用标准C++的类型转换符,标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。

static_cast

只要是不包含底层的const,我们都可以使用static_cast,当需要一个较大的算数类型赋值给较小的类型的时候,这个时候static_cast非常有用。这个时候就相当于你告诉了编译器,我们知道并且不在乎精度的损失。
另外,static_cast还可以对void指针转换成想要的类型的指针。但是这里面我们需要确保转换后得到的类型就是指针所指的类型,如果类型不符合,会产生未定义的后果。

用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类指针或引用)时,由于没有动态类型检查,所以是不安全的。
只是适用于可以实现隐式类型转化的相关类型。否则会出现错误。
用法:static_cast < type-id > ( expression )

const_cast

只改变常量属性。
常量指针被转化成非常量指针,并且仍然指向原来的对象;常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。
可以称作为去掉常属性。

只有const_cast能改变表达式的常量属性,使用其他类型会出现编译器错误。同样,不能改变表达式的类型。
用法:const_cast < type-id > ( expression )

reinterpret_cast

用于将一种类型转换为另一种类型,只适用于不相关的类型,这种类型转换的权限很大。比如:它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。

因为它通常会为运算对象的位模式提供较低层次上的重新解释,所以权限大。

所以,带来的问题是它很危险。它本质上是依赖于机器,所以想要安全的使用它必须对相关类型和编译器实现转换的过程非常了解才行。

用法:reinpreter_cast (expression)

dynamic_cast

动态转化,用于将一个基类对象指针/引用转换为拍摄类对象指针/引用。

向上转型:子类对象指针->父类指针/引用(不需要转换)
向下转型:父类对象指针->子类指针/引用(用dynamic_cast转型是安全的)
1 . dynamic_cast只能用于含有虚函数的类
2 . dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回0。
用法:dynamic_cast < type-id > ( expression )

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Visual Studio2013编译报错,“因为计算机丢失MVSCRR120D.dll”解决办法

更新VS2013后编译报错 “main.exe”(Win32):  已加载“G:\MyCode\VS2013\Clock\main\Debug\main.exe”。已加载符号。 “main...

Android+OpenCV 摄像头实时识别模板图像并跟踪

通过电脑摄像头识别事先指定的模板图像,实时跟踪模板图像的移动【用灰色矩形框标识】 ps:一开始以为必须使用OpenCV Manager,可是这样会导致还需要用户去额外安装一个apk,造成用户体验很差,...

标准C++中的几种强制类型转换方式比较说明

ANSI-C++新标准定义的四个转换符,即static_cast、dynamic_cast、reinterpret_cast和const_cast。同时在C++环境中,原先的C-Style的类型转换仍...

C++中几种强制类型转换的区别和联系

C++中包含哪几种强制类型转换?他们有什么区别和联系? reinterpret_cast: 转换一个指针为其它类型的指针。它也允许从一个指针转换为整数类型,反之亦 然. 这个操作符能够在非相关的...

浅谈C++中强制类型转换函数

  • 2015年05月19日 17:46
  • 61KB
  • 下载

C++之强制类型转换原理

不管是哪种编程语言,都会涉及到数据类型转换。强制类型转换是将操作数的类型转换成所需要的类型。强制类型转换到底是如何实现的?请先看下面一个简单数据类型的转换: 一、简单数据类型的强制类型转换 cha...

C++的cast强制类型转换

  • 2012年12月02日 00:24
  • 22KB
  • 下载

解析C++中四种强制类型转换的区别详解

c++ 强制类型转换
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++当中的几种强制类型转换
举报原因:
原因补充:

(最多只允许输入30个字)