全国咨询/投诉热线:400-618-9090

首页技术文章正文

C ++中四种类型转换方式

更新时间:2017-11-14 来源:黑马程序员 浏览量:

类型转换有c风格的,当然还有c++风格的。c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传统的c语言风格的类型转换没有区分这些。还有一个缺点就是,c风格的转换不容易查找,他由一个括号加上一个标识符组成,而这样的东西在c++程序里一大堆。所以c++为了克服这些缺点,引进了4新的类型转换操作符,他们是1、static_cast  2、const_cast  3、dynamic_cast  4、reinterpret_cast。

1、static_cast

类似于C风格的强制转换。无条件转换,静态类型转换。用于:

1、基类和子类之间转换:其中子类指针转换成父类指针是安全的;但父类指针转换成子类指针是不安全的。(基类和子类之间的动态类型转换建议用dynamic_cast)

2、基本数据类型转换。enum, struct, int, char, float等。static_cast不能进行无关类型(如非基类和子类)指针之间的转换。

3、把空指针转换成目标类型的空指针。

4、把任何类型的表达式转换成void类型。

5、static_cast不能去掉类型的const、volitale属性(用const_cast)。

int n = 6;

double d = static_castdouble>(n); // 基本类型转换

int *pn = &n;

double *d = static_castdouble *>(&n) //无关类型指针转换,编译错误

void *p = static_castvoid *>(pn); //任意类型转换成void类型

2、const_cast

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

如:const int *fun(int x,int y){}

int *ptr=const_cast(fun(2.3))

3、dynamic_cast

该操作符用于运行时检查该转换是否类型安全,但只在多态类型时合法,即该类至少具有一个虚拟方法。dynamic_cast与static_cast具有相同的基本语法,dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。如:

class C

{

//…C没有虚拟函数

};

class T{

//…

}

int main()

{

dynamic_cast(new C);//错误

}

此时如改为以下则是合法的:

class C

{

public:

virtual void m() {};// C现在是 多态

}

4、reinterpret_cast

interpret是解释的意思,reinterpret即为重新解释,此标识符的意思即为数据的二进制形式重新解释,但是不改变其值。

如:int i; char *ptr="hello freind!"; i=reinterpret_cast(ptr);这个转换方式很少使用。友情提示:获得更多学科学习视频+资料+源码,请加QQ:3276250747。


本文版权归黑马程序员C/C++学院所有,欢迎转载,转载请注明作者出处。谢谢!


作者:黑马程序员C/C++培训学院


首发:http://c.itheima.com/


javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

http://www.itcast.cn/subject/uizly/index.shtml?seozxuids

14天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

8天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

0天免费试学

基础班入门课程限时免费

申请试学名额

12天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

10天免费试学

基础班入门课程限时免费

申请试学名额
在线咨询 我要报名